ایجاد Custom Dialog در اندروید
سلام و درورد فراوان بر شما دوستان گرامی.
بعد از مدت ها اومدم تا در دنیای عظیم اینترنت نقشی بزنم!
اینجاد کاستم دیالوگ یا Custom Dialog
گاهی وقت ها قصد نمایش پنجره ای را داریم که به صورت popup نمایش داده شود و مهتر اینکه چیز هایی که مد نظر خودمان هست را نمایش دهد. یعنی یک View کاملا سفارشی.
برای پیاده سازی این کار باید کلاسی را طراحی کنیم که از DialogFragment ارث بری کند و همچنین Layout را طراحی کنیم که به این کلاس متصل شود و آن را نمایش دهد.
اگر جستجو کنید مثال های فراوانی را پیدا میکنید که توسط کلاس پایه ای Dialog این مساله را پیاده سازی کرده اند.
سایت رسمی گوگل هشدار داده که اصلا به صورت مستقیم از کلاس پایه ای Dialog استفاه نشود بلکه از مشتقات آن یعنی AlertDialog و یا DatePickerDialog یا TimePickerDialog استفاده شود.
خب توضیح کافیه بریم سر اصل مطلب...
ابتدا فایل Layout را طراحی میکنیم:
android:id="@+id/edit_name"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:orientation="vertical" >
android:id="@+id/lbl_your_name" android:text="Your name" android:layout_width="wrap_content" android:layout_height="wrap_content" /> android:id="@+id/txt_your_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="text" android:imeOptions="actionDone" /> حالا کلاس فرگمنتی که قرار هست کدها و لایه نمایشی سفارشی را در آن قرار دهیم را پیاده سازی مکینم. البته باید از DialogFragment متشق شده باشه و اینکه android.support.v4.app.DialogFragment به آن اضافه شود. اگر از Gradle استفاده میکنید که باید در تنضیمات گردل آن را اضافه کنید و یا به صورت خودکار اضافه میشود. کد کلاس: import android.support.v4.app.DialogFragment; // ... public class EditNameDialogFragment extends DialogFragment { private EditText mEditText; public EditNameDialogFragment() { // Empty constructor is required for DialogFragment // Make sure not to add arguments to the constructor // Use `newInstance` instead as shown below } public static EditNameDialogFragment newInstance(String title) { EditNameDialogFragment frag = new EditNameDialogFragment(); Bundle args = new Bundle(); args.putString("title", title); frag.setArguments(args); return frag; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_edit_name, container); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); // Get field from view mEditText = (EditText) view.findViewById(R.id.txt_your_name); // Fetch arguments from bundle and set title String title = getArguments().getString("title", "Enter Name"); getDialog().setTitle(title); // Show soft keyboard automatically and request focus to field mEditText.requestFocus(); getDialog().getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); } } برای نمایش این دیالوگ هم از این کد استفاده کنید: private void showEditDialog() { FragmentManager fm = getSupportFragmentManager(); EditNameDialogFragment editNameDialogFragment = EditNameDialogFragment.newInstance("Some Title"); editNameDialogFragment.show(fm, "fragment_edit_name"); } } امیدوارم مفید باشد. بهزاد حاجی احمدی شنبه بیست و هفتم آبان 1396 : https://developer.android.com/guide/topics/ui/dialogs.html https://guides.codepath.com/android/using-dialogfragment امیدوارم مفید باشد. بهزاد حاجی احمدی شنبه بیست و هفتم آبان 1396
موفق و سلامت و شاد باشید
موفق و سلامت و شاد باشید
سلام