如何设置对话框按钮文本的字体大小

2022-09-03 03:20:37

我有一个Android应用程序,它使用一些自定义对话框,这些对话框是从XML布局中膨胀出来的。对话框视图的内容来自 XML 布局,但实际的正按钮和负按钮是通过调用生成器的 setPositiveButton 和 setNegativeButton 方法来添加的,因此我无法控制(或者至少不知道如何控制)按钮本身的样式。

请参阅下面的 onCreateDialog 方法,该方法来自我的 LoginConfirmationDialog.java扩展 DialogFragment 的文件。它基本上弹出一个非常简单的对话框,要求确认谁正在登录(即“你是Joe Schmoe吗?”,带有“是”和“否”按钮)。

在这种情况下,XML 布局只有一个 TextView,为了简化此操作(因为用户将是具有大块脏手指的建筑工人,需要大文本和大按钮),我将 TextView 的字体变得非常大。这两个按钮的文本字体要小得多,并且由于它们不是我的布局的一部分,并且是使用setPositiveButton和setNegativeButton方法添加的,所以我如何控制字体大小?

@Override    
public Dialog onCreateDialog(Bundle savedInstanceState) {

    Bundle args = this.getArguments();

    String empName = args.getString("empName");         

    // Use the Builder class for convenient dialog construction        
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 

    View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_login_confirmation, null);

    TextView message = (TextView)view.findViewById(R.id.txtLoginConfirmationMessage);
    message.setText("Are you " + empName + "?");

    builder.setView(view);      

    builder.setPositiveButton("Yes", 
            new DialogInterface.OnClickListener() {                   
                public void onClick(DialogInterface dialog, int id) {
                    mListener.onEmpConfirmPositiveClick(LoginConfirmationDialog.this);
                }               
            });               
    builder.setNegativeButton("No", 
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    mListener.onEmpConfirmNegativeClick(LoginConfirmationDialog.this);
                }
            });  

    // Create the AlertDialog object and return it        
    return builder.create();    
}

答案 1

与其返回,不如试试这个。builder.create()

final AlertDialog alert = builder.create();
alert.setOnShowListener(new DialogInterface.OnShowListener() {
    @Override
    public void onShow(DialogInterface dialog) {
        Button btnPositive = alert.getButton(Dialog.BUTTON_POSITIVE);
        btnPositive.setTextSize(TEXT_SIZE);

        Button btnNegative = alert.getButton(Dialog.BUTTON_NEGATIVE);
        btnNegative.setTextSize(TEXT_SIZE);
    }
});

return alert;

答案 2

我花了一段时间来整合Asok的答案,因为我对按钮使用了匿名内部类,所以我需要处理按钮引用。这有效。确保它位于 messageDialog.show() 行之后:

messageDialog.show();
messageDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextSize(TypedValue.COMPLEX_UNIT_SP, 25.0f);
messageDialog.getButton(AlertDialog.BUTTON_NEUTRAL).setTextSize(TypedValue.COMPLEX_UNIT_SP, 25.0f);

注意:建议使用 sp 作为文本大小的单位。与px不同,它与设备密度无关。


推荐