شرح كيفية إنشاء Custom Dialog واستدعاءه داخل الActivity في الاندرويد ستوديو
في دروس سابقه قمنا معكم بشرح تصميم مربع حواري مخصص ولكن المشكلة التي قد تقابل البعض والاغلب منكم وهيا انه لا يعمل سوا في fragment فقط ولكن اذا كنت بداخل activity الامر سوف يكون معقد قليلا ولن تعرف ماذا تفعل ؟ ولكن لا تقلق في مقالة اليوم سوف نقوم بنفس الطريقة تقريبا ولكن بداخل الactivity لكي لا تقابلك مشاكل بعد ذلك ولا تقلق عندما تقع في اي مشكلة مستقبلا لا تتردد بالبحث في موقعنا .
مع إطارات اختبار JUNIT 4 و Winkal UI ، يوفر Android Studio أدوات قوية لمساعدتك في اختبار تطبيقات Android. يمكنك تطوير رمز اختبار واجهة المستخدم باستخدام مسجل اختبار Espresso عن طريق تسجيل ردود أفعالك على البرنامج على الجهاز أو المحاكي. يمكنك استخدام جهاز أو جهاز محاكاة ، أو بيئة تكامل متكاملة ، أو معمل اختبار FireBase لتنفيذ اختباراتك.
تصميم xml للdialog في الاندرويد ستوديو
قم بإنشاء اي صفحة xml فارغه وتصميم بداخلها الشكل الذي تريده وهنا قمت بجعل التصميم بسيط جدا عباره عن cardView وبداخله نص وزر لاغلاق الdialog يمنكك تصميم اي شكل تريده ويجعبك .
dialog.xml
<androidx.cardview.widget.CardView
android:id="@+id/cardView_dialog"
app:cardCornerRadius="@dimen/_15sdp"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<androidx.core.widget.NestedScrollView
android:layout_margin="@dimen/_10sdp"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:orientation="vertical"
android:padding="@dimen/_10sdp"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/text_qotof"
android:layout_gravity="center"
android:gravity="center"
android:lineSpacingExtra="@dimen/_3sdp"
android:text="test"
android:layout_width="wrap_content"
android:textSize="@dimen/_13ssp"
android:layout_height="match_parent" />
<com.google.android.material.button.MaterialButton
android:id="@+id/exit"
android:layout_marginTop="@dimen/_5sdp"
android:text="idea"
android:textColor="@color/white"
app:cornerRadius="@dimen/_8sdp"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</androidx.cardview.widget.CardView>
إنشاء Class لتنفيذ اظهار الdialog واستقبال البيانات داخله
في هذه الصفحه سوف نقوم بإنشاء class فارغ وعمل methode بداخله كما هو موضح وبعدها سوف تستقبل منك الactivity والنص والcontext يمكنك استقبال اي بيانات تريدها الامر راجع لك وبعدها جعلنا التصميم عباره عن dialog واخبرناه بعدم اغلاق المربع نهائيا اذا تم النقر خارجه وبعدها يمكنك استخدام الامر setSoftInputMode و setLayout لكي نجعل التصميم بكامل الشاشه ولكن هنا قمنا بإيقافه وبعدها الlayout التي سوف يعمل عليها واسقلها قمنا بتعريف العناصر التي نريدها واستخدام الاوامر التي نريدها في عرض عمليات معينه او تنفيذ عمليات وايضا هنا استخدمنا PreferenceManager حيث حفظنا بداخله قيمة معينه وعند استدعائها يتم تغيير لون الcardview يمكنك ان تتغاظى عن هذه العملية وايضا الandroid.R.color.transparent لكي نجعل الcardView او التصميم عموما شفاف .
CustomDialogClass.java
public class CustomDialogClass {
public void showDialog(Activity activity, String msg , Context context){
final Dialog dialog = new Dialog(activity);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCancelable(false);
dialog.setCanceledOnTouchOutside(false);
// MATCH_PARENT
// dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
// dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
// color TRANSPARENT
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
PreferenceManager preferenceManager = new PreferenceManager(context);
dialog.setContentView(R.layout.fragment_qotof);
Button dialogButton = dialog.findViewById(R.id.exit);
CardView cardView = dialog.findViewById(R.id.cardView_dialog);
TextView text = dialog.findViewById(R.id.text_qotof);
text.setText(msg);
if (preferenceManager.getBoolean(Constant.Key_DARK_MODE)) {
cardView.setCardBackgroundColor(Color.parseColor("#062C30"));
} else {
cardView.setCardBackgroundColor(Color.parseColor("#F4FFF3"));
}
dialogButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}
}
كيفية استدعاء الcustom dialog في الactivity وتمرير البيانات بداخلها
CustomDialogClass alert = new CustomDialogClass();
alert.showDialog(this, "test" , this);