如果我想显示对话框,我可以写下这些代码:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.show();
但是当我看到API时,它说我们应该创建一个继承DialogFragment
的类。所以我的问题是我应该总是使用DialogFragment
类吗?在这种情况下,我只能使用这个类?
答案 0 :(得分:0)
不,您不应该每次都要求使用DialogFragment。你可以使用它。
public void showSimpleInfoAlertDialog(Context context, String title, String msg) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
AlertDialog dialog;
builder.setTitle(title);
builder.setIcon(android.R.drawable.ic_dialog_info);
builder.setMessage(msg);
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//your stuff
dialog.dismiss();
}
});
dialog = builder.create();
dialog.show();
}
答案 1 :(得分:0)
我建议使用这个非常令人愉快的库(https://github.com/afollestad/material-dialogs)。它减少了代码库并确保了一致的外观。您还可以针对更复杂的情况自定义其内容/行为,例如自定义列表或侦听器
答案 2 :(得分:0)
我有类似的问题,,,我必须实现一个登录对话框,我做了以下操作,它就像一个魅力,,,试一试
这是我的登录对话框布局XML内容,你可以设计你的布局,它由你决定
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:layout_width="match_parent"
android:layout_height="64dp"
android:background="@android:color/holo_blue_light"
android:contentDescription="@string/app_name"
android:scaleType="center"
android:src="@drawable/logo" />
<EditText
android:id="@+id/username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:layout_marginTop="16dp"
android:hint="Username or Email"
android:inputType="textEmailAddress" />
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:layout_marginTop="4dp"
android:fontFamily="sans-serif"
android:hint="Password"
android:inputType="textPassword" />
<Button
android:id="@+id/facebook_login"
android:layout_width="fill_parent"
android:layout_height="40sp"
android:layout_below="@+id/linearLayout2"
android:layout_gravity="center_horizontal"
android:layout_margin="5dp"
android:background="#3b5998"
android:text="Login via Facebook"
android:textColor="#ffffffff" />
<Button
android:id="@+id/twitter_login"
android:layout_width="fill_parent"
android:layout_height="40sp"
android:layout_below="@+id/facebook_normal"
android:layout_gravity="center_horizontal"
android:layout_margin="5dp"
android:background="#55ACEE"
android:text="Login via Twitter"
android:visibility="gone"
android:textColor="#ffffffff" />
<Button
android:id="@+id/google_login"
android:layout_width="fill_parent"
android:layout_height="40sp"
android:layout_below="@+id/twitter"
android:layout_gravity="center_horizontal"
android:layout_margin="5dp"
android:background="#D64534"
android:text="Login via Google"
android:textColor="#ffffffff" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/login_button"
android:layout_width="wrap_content"
android:layout_height="30sp"
android:layout_alignParentTop="true"
android:layout_gravity="center_horizontal"
android:layout_margin="5dp"
android:layout_marginEnd="20dp"
android:layout_marginRight="20dp"
android:layout_toLeftOf="@+id/cancel_button"
android:layout_toStartOf="@+id/cancel_button"
android:background="#FFFFFF"
android:text="Login"
android:textColor="#009688" />
<Button
android:id="@+id/cancel_button"
android:layout_width="0dp"
android:layout_height="30sp"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_gravity="center_horizontal"
android:layout_margin="5dp"
android:background="#FFFFFF"
android:textColor="#009688"
android:visibility="invisible" />
</RelativeLayout>
在此之后你需要做的就是在dialogBuilder中膨胀这个布局,如下所示
{
LayoutInflater linf = LayoutInflater.from(getContext());
final View inflator = linf.inflate(R.layout.login_dialog, null);
final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
fLogin = (Button) inflator.findViewById(R.id.facebook_login);
gLogin = (Button) inflator.findViewById(R.id.google_login);
tLogin = (Button) inflator.findViewById(R.id.twitter_login);
loginButton = (Button) inflator.findViewById(R.id.login_button);
cancelButton = (Button) inflator.findViewById(R.id.cancel_button);
uName = (TextView) inflator.findViewById(R.id.username);
pwd = (TextView) inflator.findViewById(R.id.password);
/** You can handle click events here**//
builder.setView(inflator).show();
}
希望这会有所帮助...
答案 3 :(得分:0)
如Dialogs guide中所述,建议您始终使用DialogFragment类。 DialogFragment将处理应用程序的生命周期事件并提供正确的行为。
检查文档中的这个摘录
但您应该使用DialogFragment作为对话框的容器。 DialogFragment类提供了创建所需的所有控件 您的对话框并管理其外观,而不是调用方法 对话框对象