繁体   English   中英

对话框按钮的可视化自定义

[英]Visual customization of a dialog button

我在我的应用程序中使用一个对话框,该对话框弹出并与用户交互。 我以前没有使用过对话框,因此我几乎不了解其样式。 这是代码:

public void openDialog() {
    @SuppressLint("InflateParams") View view = (LayoutInflater.from(AudioRecorder.this)).inflate(R.layout.audio_name_input, null);

    AlertDialog.Builder alertBuilder = new AlertDialog.Builder(AudioRecorder.this);
    alertBuilder.setView(view);
    final EditText userInput = view.findViewById(R.id.userInput);

    alertBuilder.setCancelable(true);
    alertBuilder.setPositiveButton("Save", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            inputName = String.valueOf(userInput.getText());
            if (!inputName.isEmpty()) {
                Toast.makeText(AudioRecorder.this, "Next audio clip will be named... " + inputName, Toast.LENGTH_SHORT).show();
                filePathMaking();
            } else {
                inputName = "recorded_audio";
                Toast.makeText(AudioRecorder.this, "Input field empty, next audio clip will be named... " + inputName, Toast.LENGTH_SHORT).show();
            }
        }
    });

    alertBuilder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
        }
    });

    Dialog dialog = alertBuilder.create();
    dialog.show();
}

我们可以设置“保存”按钮的样式以显示红色文本吗?

您可以获取Button ,然后更改其文本颜色。 遵循以下思路应该可以,

public void openDialog() {
    @SuppressLint("InflateParams") View view = (LayoutInflater.from(AudioRecorder.this)).inflate(R.layout.audio_name_input, null);

    AlertDialog.Builder alertBuilder = new AlertDialog.Builder(AudioRecorder.this);
    alertBuilder.setView(view);
    final EditText userInput = view.findViewById(R.id.userInput);

    alertBuilder.setCancelable(true);
    alertBuilder.setPositiveButton("Save", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            inputName = String.valueOf(userInput.getText());
            if (!inputName.isEmpty()) {
                Toast.makeText(AudioRecorder.this, "Next audio clip will be named... " + inputName, Toast.LENGTH_SHORT).show();
                filePathMaking();
            } else {
                inputName = "recorded_audio";
                Toast.makeText(AudioRecorder.this, "Input field empty, next audio clip will be named... " + inputName, Toast.LENGTH_SHORT).show();
            }
        }
    });

    alertBuilder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
        }
    });

    Dialog dialog = alertBuilder.create();
    dialog.show();

    Button positiveButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
    positiveButton.setTextColor(Color.parseColor("#FF0B8B42"));
}

您可以按照Chrisvin Jem在他的答案中建议的方式使用AlertDialog ,但我想提供另一个解决方案:

您可以只创建一个自定义对话框类,以便为您的对话框提供自定义布局,在单独的类中控制所有内容-我发现它更简洁,更有条理。

例如,创建dialogClass:

public class ProgressDialog extends Dialog {

public ProgressDialog(@NonNull Context context) {
    super(context);

    setContentView(R.layout.progress_dialog); //this is your layout for the dialog

    }
}

您所需要做的就是立即创建对话框并按如下方式调用它:

ProgressDialog progressDialog = new ProgressDialog(getContext());
progressDialog.show(); // this line shows your dialog

为什么我建议使用此而不是AlertDialog.Builder

  • 您可以使用自定义对话框以更快的方式构建布局。

  • 当您可以使用自定义布局时,无需为了添加视图而编写大量代码。

  • 对您来说,查看myCoolDialog.show();更容易(或我相信myCoolDialog.show(); 而不是单个方法包含50行或更多行代码。

  • 您是否需要更改有关对话框外观和代码的任何内容? 好的,转到您自己的类并进行更改,而不是在活动中添加20条代码行。

克里斯文·杰姆(Chrisvin Jem)给出了问题的确切答案,但是,如果您想对设计进行更多控制,则可以使用此代码

 final Dialog dialog = new Dialog(context);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setCancelable(false);
        dialog.setContentView(R.layout.yourview);

    RelativeLayout submit = dialog.findViewById(R.id.submit);
    final EditText edittext = dialog.findViewById(R.id.edittext);


    submit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dialog.dismiss();

            Toast.makeText(context, getString(R.string.thanks), Toast.LENGTH_SHORT).show();
        }
    });

    dialog.show();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM