什么是默认对话框消息字体大小?

时间:2018-03-10 14:22:37

标签: android

使用AlertDialog.Builder.setView我将显示如下自定义对话框:

AlertDialog alertDialog = new AlertDialog.Builder(this)
        .setView(getLayoutInflater().inflate(R.layout.custom_dialog, null))
        .setTitle(getResources().getString(R.string.custom_dialog_title))
        .setMessage(getResources().getString(R.string.custom_dialog_prompt))
        // ... 
        .create();

alertDialog.show();

custom_dialog只是一个简单的布局(只是一个例子):

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"    
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingStart="?dialogPreferredPadding"
    android:paddingEnd="?dialogPreferredPadding"
    android:orientation="vertical">

    <CheckBox
        style="?android:attr/textAppearance"
        android:id="@+id/checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/custom_dialog_checkbox" />

</LinearLayout>

我的CheckBox现在使用默认文字大小,因为没有明确指定android:textSize

默认AlertDialog.Builder.setMessage文字的字体大小与默认的CheckBox字体大小不同。设置CheckBox的大小以匹配setMessage文字的字体大小的正确方法是什么?

正如您在我的示例中所看到的,我使用系统属性?dialogPreferredPadding进行对话框填充。对话框消息字体大小是否有类似的属性?

1 个答案:

答案 0 :(得分:0)

由于我无法找到确定系统对话框消息文本大小的直接方法,因此我实施了一种解决方法......

在调用alertDialog.show();之前,设置/添加了OnShowListener

alertDialog.setOnShowListener(new DialogInterface.OnShowListener()  {

    @Override
    public void onShow(DialogInterface dialog)
    {
        float textSize = 0;
        int messageId = getResources().getIdentifier("message", "id", "android");
        if (messageId > 0)
        {
            View view = ((AlertDialog) dialog).findViewById(messageId);
            if (view != null)
                textSize = ((TextView) view).getTextSize();
        }
        CheckBox checkbox = ((AlertDialog) dialog).findViewById(R.id.checkbox);
        if (checkbox != null)
        {
            if (textSize > 0)
                checkbox.setTextSize(TypedValue.COMPLEX_UNIT_PX, (int) textSize);
        }
    }
});