展会信息港展会大全

android Dialogs
来源:互联网   发布日期:2015-10-03 11:40:18   浏览:2604次  

导读:1.引言Dialog是对话框的基类,可以实现以下子类:AlertDialog,DatePickerDialog,TimPickerDialog。这些类为你定义了样式和结构,不过你可以使用...

1.引言

Dialog是对话框的基类,可以实现以下子类:

AlertDialog,DatePickerDialog,TimPickerDialog。

这些类为你定义了样式和结构,不过你可以使用DialogFragment作为对话框的内容。通过DialogFragment你可以自由控制你的对话框,而不是继承Dialog对象沿用Dialog对象的一些方法。

当用户按返回键或屏幕翻转的时候要注意DialogFragment的生命周期。DialogFragment也允许你把它的UI用在打的UI上。

如果使用Support library记得引用android.support.v4.app.DialogFragment而不是android.app.DialogFragment.

2.一个最简单的例子

public class FireMissilesDialogFragment extends DialogFragment {

@Override

public Dialog onCreateDialog(Bundle savedInstanceState) {

// Use the Builder class for convenient dialog construction

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

builder.setMessage(R.string.dialog_fire_missiles)

.setPositiveButton(R.string.fire, new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int id) {

// FIRE ZE MISSILES!

}

})

.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int id) {

// User cancelled the dialog

}

});

// Create the AlertDialog object and return it

return builder.create();

}

}

当你想显示Dialog时,只需调用show()

3.方法回调

在DialogFragment中设置一个interface,通过这个接口可以将事件传递到主activity中

public class NoticeDialogFragment extends DialogFragment {

/* The activity that creates an instance of this dialog fragment must

* implement this interface in order to receive event callbacks.

* Each method passes the DialogFragment in case the host needs to query it. */

public interface NoticeDialogListener {

public void onDialogPositiveClick(DialogFragment dialog);

public void onDialogNegativeClick(DialogFragment dialog);

}

// Use this instance of the interface to deliver action events

NoticeDialogListener mListener;

// Override the Fragment.onAttach() method to instantiate the NoticeDialogListener

@Override

public void onAttach(Activity activity) {

super.onAttach(activity);

// Verify that the host activity implements the callback interface

try {

// Instantiate the NoticeDialogListener so we can send events to the host

mListener = (NoticeDialogListener) activity;

} catch (ClassCastException e) {

// The activity doesn't implement the interface, throw exception

throw new ClassCastException(activity.toString()

+ " must implement NoticeDialogListener");

}

}

...

}

4.DialogFragmnt既可以显示为一个全屏的对话框,亦可以显示为一个嵌入的Fragment

public class CustomDialogFragment extends DialogFragment {

/** The system calls this to get the DialogFragment's layout, regardless

of whether it's being displayed as a dialog or an embedded fragment. */

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

// Inflate the layout to use as dialog or embedded fragment

return inflater.inflate(R.layout.purchase_items, container, false);

}

/** The system calls this only when creating the layout in a dialog. */

@Override

public Dialog onCreateDialog(Bundle savedInstanceState) {

// The only reason you might override this method when using onCreateView() is

// to modify any dialog characteristics. For example, the dialog includes a

// title by default, but your custom layout might not need it. So here you can

// remove the dialog title, but you must call the superclass to get the Dialog.

Dialog dialog = super.onCreateDialog(savedInstanceState);

dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

return dialog;

}

}

public void showDialog() {

FragmentManager fragmentManager = getSupportFragmentManager();

CustomDialogFragment newFragment = new CustomDialogFragment();

if (mIsLargeLayout) {

// The device is using a large layout, so show the fragment as a dialog

newFragment.show(fragmentManager, "dialog");

} else {

// The device is smaller, so show the fragment fullscreen

FragmentTransaction transaction = fragmentManager.beginTransaction();

// For a little polish, specify a transition animation

transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);

// To make it fullscreen, use the 'content' root view as the container

// for the fragment, which is always the root view for the activity

transaction.add(android.R.id.content, newFragment)

.addToBackStack(null).commit();

}

}

其中mIsLargeLayout根据当前设备判断是否使用app的大UI布局。

mIsLargeLayout的取值方法如下:

res/values/bools.xml

false

res/values-large/bools.xml

true

boolean mIsLargeLayout;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mIsLargeLayout = getResources().getBoolean(R.bool.large_layout);

}

5.如果你的应用只是适配了小屏幕的手机,那么:

将你的activity设置为Theme.Holo.DialogWhenLarge会在大屏幕上展示为对话框。

赞助本站

人工智能实验室

相关热词: android开发

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港