【问题标题】:How to lower message height of MaterialAlertDialog如何降低 MaterialAlertDialog 的消息高度
【发布时间】:2020-02-26 18:12:20
【问题描述】:

我正在尝试使用 MaterialAlertDialogBu​​ilder 创建一个 MaterialAlertDailog。 我设法控制了styles.xml 中对话框的大部分属性,除了消息和OK 按钮之间的空间。

我目前正在使用这个依赖:

implementation "com.google.android.material:material:1.1.0"

styles.xml

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="@style/Theme.MaterialComponents.Light">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>


    <style name="MaterialDialogDark" parent="@style/ThemeOverlay.MaterialComponents.MaterialAlertDialog">
        <!-- Customize your theme here. -->
        <item name="colorSurface">@color/material_dialog_background_color_dark</item>
        <item name="buttonBarPositiveButtonStyle">@style/MaterialAlert.Button.Dark</item>
        <item name="buttonBarNegativeButtonStyle">@style/MaterialAlert.Button.Dark</item>
        <item name="materialAlertDialogBodyTextStyle">@style/MaterialAlert.Body.Dark</item>
        <item name="materialAlertDialogTitleTextStyle">@style/MaterialAlert.Title.Dark</item>
        <item name="materialAlertDialogTitlePanelStyle">@style/MaterialAlert.Panel</item>
    </style>


    <style name="MaterialAlert.Panel" parent="MaterialAlertDialog.MaterialComponents.Title.Panel">

        <item name="android:layout_height">90dp</item>

    </style>

    <style name="MaterialAlert.Button.Dark" parent="Widget.MaterialComponents.Button.TextButton">
        <item name="android:textColor">@color/material_dialog_btn_color</item>
        <item name="android:textSize">16sp</item>
        <item name="android:textAllCaps">false</item>
    </style>

    <style name="MaterialAlert.Body.Dark" parent="MaterialAlertDialog.MaterialComponents.Title.Text">
        <item name="android:textSize">16sp</item>
        <item name="android:textColor">@color/material_dialog_body_color</item>
        <item name="android:singleLine">false</item>
        <item name="android:lines">5</item>
        <item name="android:lineSpacingMultiplier">1.1</item>
        <item name="android:paddingTop">10dp</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:minHeight">20dp</item>
        <item name="android:paddingBottom">0dp</item>
        <item name="android:ellipsize">none</item>
    </style>

    <style name="MaterialAlert.Title.Dark" parent="MaterialAlertDialog.MaterialComponents.Title.Text">
        <item name="android:textSize">20sp</item>
        <item name="android:textStyle">bold</item>
        <item name="android:textColor">@color/material_dialog_title_color_dark</item>
    </style>

</resources>

MainActivity.java

findViewById(R.id.testDialog).setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                new MaterialAlertDialogBuilder(MainActivity.this ,R.style.MaterialDialogDark)
                        .setTitle(R.string.label_title)
                        .setMessage(R.string.label_not_enough_points)

                        .setPositiveButton(android.R.string.ok,(dialogInterface, i) -> {})
                        .show();
            }
        });

【问题讨论】:

  • 问题可能出在 MaterialAlert.Body.Dark:&lt;item name="android:lines"&gt;5&lt;/item&gt;
  • 你是对的!但现在我有一个不同的问题,我有几条消息(几个场景)有不同的行数。如果我将删除 lines 属性,我将只看到第一行。无论我有多少行,它都可以是 wrap_content 吗?
  • Material Styles,我认为&lt;item name="android:layout_height"&gt;wrap_content&lt;/item&gt;应该可以,但我从未尝试过。
  • 我的样式中有那行 (MaterialAlert.Body.Dark),但似乎 textview 忽略了它,或者我的样式属性有问题
  • 也许&lt;item name="android:singleLine"&gt;false&lt;/item&gt; 搞砸了?

标签: android material-design android-styles


【解决方案1】:

我意识到没有一个简单的解决方法(至少通过使用 styles.xml)最后我创建了一个自定义布局(它只有一个 textview),然后它就可以正常工作了。

custom_text.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/message"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:textSize="18sp"
    android:textColor="@color/material_dialog_body_color"
    android:paddingTop="15dp"
    android:paddingBottom="15dp"
    android:paddingLeft="23dp"
    android:paddingRight="23dp"/>

活动

      findViewById(R.id.testDialog).setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                  AlertDialog dialog = new MaterialAlertDialogBuilder(MainActivity.this ,R.style.MaterialDialogDark)
                        .setTitle(R.string.label_title)
//                        .setMessage(R.string.label_mark_used_sure)
                        .setView(R.layout.material_text_alet_dialog)
                        .setPositiveButton(R.string.label_yes,(dialogInterface, i) -> {
                            Toast.makeText(MainActivity.this, "Positive", Toast.LENGTH_LONG).show();
                        })

                        .setNegativeButton(R.string.label_no,(dialogInterface, i) -> {
                            Toast.makeText(MainActivity.this, "Negative", Toast.LENGTH_LONG).show();
                        }).show();


                  TextView msgText = dialog.findViewById(R.id.message);
                  msgText.setText(getString(R.string.not_authorized));



            }
        });

【讨论】:

    猜你喜欢
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    相关资源
    最近更新 更多