میخوای وارد بازار کار بشی و محصولات خودت رو بفرشی همین الان ثبت نام کن
0

dialog در اندروید

۶۲ / ۱۰۰

این آموزش نحوه ی پیاده سازی و استفاده از dialog یا پنجره ی محاوره ای (که به صورت کادر شناور بر روی پنجره ی activity نمایش داده می شود) در اپلیکیشن های اندرویدی را شرح می دهد.

پروژه ی این مبحث داخل محیط کاری Android Studio نوشته شده و مبتنی بر ویرایش ۵٫۰ سیستم عامل اندروید می باشد.

 


به نمایش گذاشتن dialog در برنامه

جهت به نمایش گذاشتن یک کادر محاوره ای در Activity اپلیکیشن، بایستی نمونه ای از کلاس DialogFragment را پیاده سازی نمایید DialogFragment در واقع یک fragment  (آبجکتی که . تکه ای از یک activityکل را تشکیل می دهد) است که به برنامه نویس این امکان را می دهد تا پنجره ی محاوره ای را به صورت شناور بر روی پنجره ی اصلی که activityاپلیکیشن مربوطه می باشد، به نمایش بگذارد.

به منظور به نمایش گذاشتن ،dialog می توانید یا یک کلاس dialog از پیش پیاده سازی شده در fragment را باز گردانی نمایید و یا یک layout اختصاصی برای آن تعریف کنید که به هنگام اجرا برنامه فراخوانی و به نمایش گذاشته می شود.


استفاده از dialog های آماده و از قبل موجود

DialogFragment برنامه شما می تواند متد onCreateDialog را پیاده سازی نموده و dialog از پیش موجود را بازگردانی کند. کلاس Dialog ، در واقع کلاس پایه یا پدر است که برای پیاده سازی dialog باید از آن ارث بری نمایید.

برنامه نویس برای نمایش دادن dialog در اپلیکیشن خود اغلب یکی از کلاس های مشتق شده از آن همچون TimePickerDialog یا DatePickerDialog ،ProgressDialog ،AlertDialog را مورد استفاده قرار می دهد.
اندروید همچنین یک ProgressDialog ارائه می دهد که به راحتی با فراخوانی متد () ProgressDialog.open می توان آن را باز کرده و به نمایش گذاشت.


 تعریف layout اختصاصی برای DialogFragment

جهت ایجاد dialog اختصاصی خود، لازم است یک فایل layout ویژه ی آن تعریف نمایید. این فایل layout را می توان inflate نموده و با فراخوانی متد () onCreateView از fragment مربوطه بازگردانی نمود.


تعامل DialogFragment با activity

آبجکت DialogFragment درست مشابه دیگر fragment ها با activity مربوطه ارتباط برقرار کرده و اطلاعاتی را رد و بدل می کند. یک روش صحیح و بهینه این است که fragment یک interface معرفی کرده و activity مورد نظر این interface را پیاده سازی می کند. fragment سپس می تواند توسط activity صدا خورده شود، بدون اینکه اطلاعی از جزئیات پیاده سازی activity داشته باشد.


تمرین: پیاده سازی کلاس DialogFragment

در پروژه ی زیر نحوه ی استفاده از کلاس DialogFragment در activity را شرح خواهیم داد. این مثال هم از dialog از پیش ساخته و آماده استفاده می کند و هم برای آن یک layout اختصاصی تعریف می نماید.

 


ایجاد پروژه و فایل های layout

ابتدا یک پروژه ی اندروید به نام com.android.vogella.com.dialogfragmentexample ایجاد نمایید.
در فایل layout ای که activity فراخوانی می کند، دو دکمه تعریف کنید به طوری که در
خصیصه (attribute) android:onClick خود به متد onClickاشاره کنند
حال یک فایل layoutبه نام fragment_username.xml با بدنه ی زیر تعریف نمایید.

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/edit_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/lbl_your_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Enter user name" />
<EditText
android:id="@+id/username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:imeOptions="actionDone"
android:inputType="text" />
</LinearLayout>

تعریف fragment و تنظیم activity

دو کلاس fragment زیر را ایجاد نمایید.

 

package dialogfragmentexample.android.vogella.com.dialogfragmentexample;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.os.Bundle;
import android.widget.Toast;
public class MyAlertDialogFragment extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(getActivity())
// set dialog icon
.setIcon(android.R.drawable.stat_notify_error)
// set Dialog Title
.setTitle("Alert dialog fragment example")
// Set Dialog Message
.setMessage("This is a message")
// positive button
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getActivity(), "Pressed OK", Toast.LENGTH_SHORT).show();
}
})
// negative button
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getActivity(), "Cancel", Toast.LENGTH_SHORT).show();
}
}).create();
}
}
package dialogfragmentexample.android.vogella.com.dialogfragmentexample;
import android.app.DialogFragment;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.TextView;
public class MyDialogFragment extends DialogFragment implements TextView.OnEditorActionListener {
private EditText mEditText;
public interface UserNameListener {
void onFinishUserDialog(String user);
}
// Empty constructor required for DialogFragment
public MyDialogFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_username, container);
mEditText = (EditText) view.findViewById(R.id.username);
// set this instance as callback for editor action
mEditText.setOnEditorActionListener(this);
mEditText.requestFocus();
getDialog().getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
getDialog().setTitle("Please enter username");
return view;
}
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
// Return input text to activity  
UserNameListener activity = (UserNameListener) getActivity();
activity.onFinishUserDialog(mEditText.getText().toString());
this.dismiss();
return true;
}
}  





کد activity خود را به صورت زیر ویرایش نمایید.

 

package dialogfragmentexample.android.vogella.com.dialogfragmentexample;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends Activity implements MyDialogFragment.UserNameListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void onFinishUserDialog(String user) {
Toast.makeText(this, "Hello, " + user, Toast.LENGTH_SHORT).show();
}
public void onClick(View view) {
// close existing dialog fragments
FragmentManager manager = getFragmentManager();
Fragment frag = manager.findFragmentByTag("fragment_edit_name");
if (frag != null) {
manager.beginTransaction().remove(frag).commit();
}
switch (view.getId()) {
case R.id.showCustomFragment:
MyDialogFragment editNameDialog = new MyDialogFragment();
editNameDialog.show(manager, "fragment_edit_name");
break;
case R.id.showAlertDialogFragment:
MyAlertDialogFragment alertDialogFragment = new MyAlertDialogFragment();
alertDialogFragment.show(manager, "fragment_edit_name");
break;
}
}
}

اکنون زمانی که اپلیکیشن را اجرا نموده و بر روی دکمه ی مربوطه در  UI اپلیکیشن کلیک می کنید،
پنجره ی محاوره ای ( dialog 
) حاوی پیغام مورد نظر برای شما به نمایش در می آید.

 


امیدواریم آموزش dialog در اندروید نیز برای شما مفید واقع شده باشد و ادامه آموزش برنامه نویسی اندروید رو دنبال کنید . برای مطالعه پست‌ها بیشتر ، ما را در مدرسه کدنویسی تلگرام  و یا در تی جوان اینستاگرام دنبال کنید.

نظراتتون رو زیر همین پست با ما به اشتراک بگذارید.
ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

×

سلام کاربر عزیز

هر سوالی دارید در این بخش هستیم تا شما رو راهنمائی کنیم

روی لوگومون کلیک کنید

× چطور میتونم کمکتون کنم؟