安卓:带自定义对话框和中性按钮的警告对话框

4
我正在编辑我的问题以更好地理解我需要什么,因为下面的答案没有为此提供合适的解决方案。所以,我需要做的就是制作一个带有中性按钮的自定义警报对话框。以下是它应该看起来像的示例:
请参考以下链接查看图片:https://istack.dev59.com/3dlTJ.webp 到目前为止,我已经使用了xml和将活动更改为android:theme="@android:style/Theme.Holo.Light.Dialog"来使用自定义对话框,以便我可以获得相同的外观和感觉。这是我的xml代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/dialog"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/login_prompt_header"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="15dp"
        android:text="@string/login_prompt_rewards_header"
        android:textSize="17sp"
        android:textStyle="bold" >
    </TextView>

    <TextView
        android:id="@+id/login_prompt_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/login_prompt_header"
        android:layout_marginTop="5dp"
        android:gravity="center_vertical|center_horizontal"
        android:paddingLeft="18dp"
        android:paddingRight="18dp"
        android:text="@string/login_prompt_rewards_text"
        android:textSize="15sp" >
    </TextView>

    <Button
        android:id="@+id/log_in"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/login_prompt_text"
        android:layout_centerHorizontal="true"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="15dp"
        android:background="@drawable/log_in"
        android:contentDescription="@string/none" >
    </Button>

    <Button
        android:id="@+id/create_account"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/log_in"
        android:layout_centerHorizontal="true"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dp"
        android:background="@drawable/create_account"
        android:contentDescription="@string/none" >
    </Button>

</RelativeLayout>

根据上述布局,我得到了以下结果: 目前已实现 我面临的问题是:如何在自定义对话框中设置中性按钮?我对此没有任何想法。如果您对我的问题有疑问,或者您无法理解语言,请留下评论,这样我就可以再次给您明确的想法。将不胜感激的帮助。

你是如何让按钮变成绿色并且看起来有3D效果的? - Si8
@SiKni8 我使用了自定义的可绘制对象。 - Anupam
3个回答

12

创建自定义警告对话框,例如:

public void messageDialog(String title, String message, final Context activity) {

        final Dialog myDialog = new Dialog(activity);
        myDialog.setContentView(R.layout.messagescreen);
        myDialog.setTitle(title);
        myDialog.setCancelable(false);

        TextView text = (TextView) myDialog.findViewById(R.id.bidmessage);
        text.setMovementMethod(ScrollingMovementMethod.getInstance());
        text.setText(message);

        Button login = (Button) myDialog.findViewById(R.id.buttonlogin);
        login.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {

                myDialog.dismiss();


            }
        });

        Button createAccount= (Button) myDialog.findViewById(R.id.buttoncreateaccount);
        createAccount.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {

                myDialog.dismiss();


            }
        });


        myDialog.show();

    }

其中R.layout.messagescreen是您根据您的图像自定义创建的布局。请尝试并让我知道是否遇到任何问题。


朋友,你可以在这个警示对话框中放置尽可能多的按钮。这些按钮可以在你的布局中实现。 - Abhinav Singh Maurya
请看我编辑过的问题,那是我所询问的。顺便说一句,谢谢你的努力,朋友。 - Anupam
1
亲友,使用自定义时,您不能使用默认功能(如中性按钮)。您可以为此创建自己的视图。但是根据您的问题,自定义提示对话框是不错的选择。谢谢。 - Abhinav Singh Maurya
您可以在布局中自行添加“跳过”按钮。例如,可以创建一个包含文本视图的可点击布局,并将侦听器添加到该布局上,或者只需在其中实现名为“跳过”的按钮。您可以在该布局中添加任何内容。 - Abhinav Singh Maurya
实际上,您可以使用中性按钮和其他两个按钮(neg / pos)... 在 onCreateDialog 中,您应该使用:builder.setView(customView).setNeutralButton(R.string.CANCEL, new DialogInterface.OnClickListener() {...}); - Davideas
显示剩余3条评论

3

安纳潘,我知道你已经选择了一个答案,但我想补充一下我的看法,我是如何做类似的事情的。

我使用了AlertDialog而不是Dialog,并且在调用时它会浮动在应用程序上方。

private void showLoginDialog() {        
    // layout and inflater
    LayoutInflater inflater = getActivity().getLayoutInflater();
    View content = inflater.inflate(R.layout.dialog_settings, null);

    AlertDialog.Builder dialog = new AlertDialog.Builder(new ContextThemeWrapper(getActivity(), android.R.style.Theme_Holo_Light));
    dialog.setTitle(getString(R.string.title_settings_dialog));
    dialog.setView(content);

    Button butLogin = (Button) content.findViewById(R.id.log_in);
    butLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Do your Login stuff here or all another method
            // does not close dialog
        }
    });

    Button butAccount = (Button) content.findViewById(R.id.create_account);
    butAccount.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Do your Create Account stuff here or all another method
            // does not close dialog
        }
    });

    dialog.setNegativeButton(R.string.skip, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // do nothing, just allow dialog to close
        }
    });

    dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
        @Override
        public void onCancel(DialogInterface dialog) {
            // do nothing, just allow dialog to close
            // this happens on back button getting hit
        }
    });

    dialog.show();
}

这是一个更正确的答案!- 然而,最好将Builder放在DialogFragment中,在适当重写的onCreateDialog方法中。 将Dialog设置为单例,并从活动中调用YourDialog.newInstance().show(getFragmentManager(), YourDialog.TAG); - Davideas
谢谢,我会记住的,下次再用的时候 Davidea。 - Talung

0

你可以简单地设置这个:

dialog.setNeutralButton("skip", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //Your code
            }
        });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接