AlertDialog按钮没有包装在棒棒糖中

use*_*103 4 android android-layout android-alertdialog android-5.0-lollipop

我是一个相对较新的Android开发人员,遇到了一个我不知道如何纠正的问题,并希望你们可以提供建议!

在Kitkat及以下,当我创建一个具有2个按钮的AlertDialog时,如果两个按钮的文本超出按钮的长度,它们的文本将会换行.但是,在L中,文本拒绝适合.

Android 4.4:

Android 4.4

Android L:

Android L

我找到了其他一些人遇到这个问题并寻找解决方案的例子,所以我开始探索为他们提供的解决方案

Android L中的警报对话框按钮问题

https://github.com/hotchemi/Android-Rate/issues/40

根据答案,结论似乎是alertdialog的自定义样式.

我创建了一个values-v21文件夹,其中有一个styles.xml.从上面看,它看起来如下:

<resources>      

    <style name="AppBaseTheme" parent="android:Theme.Material.Light">
        <item name="android:alertDialogTheme">@style/CustomAlertDialogStyle</item>
    </style>

    <style name="CustomAlertDialogStyle" parent="android:Theme.Material.Light.Dialog.Alert">
        <item name="android:buttonBarButtonStyle">@style/CustomButtonBarButtonStyle</item>
        <item name="android:buttonBarStyle">@style/CustomButtonBarStyle</item>
    </style>

    <style name="CustomButtonBarStyle" parent="@android:style/Widget.Material.Light.ButtonBar.AlertDialog">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:height">@null</item>
        <item name="android:minHeight">@null</item>
    </style>

    <style name="CustomButtonBarButtonStyle" parent="@android:style/Widget.Material.Light.Button.Borderless.Colored">
        <item name="android:layout_width">0dp</item>
        <item name="android:layout_weight">1</item>
    </style>

</resources>
Run Code Online (Sandbox Code Playgroud)

不幸的是,我在棒棒糖Alertdialog中看不到任何明显的变化,我仍然不太熟悉布局值以查看可能出错的地方.

所以经过一段时间的探索后,我想我会问:有谁知道如何制作类似于Android 4.4的Android L按钮文字自动换行?

谢谢!

nat*_*rio 6

如上所述,新设计指南明确指出对话应该有清晰简洁的文本,让用户快速做出决定.因此,不鼓励长期采取长期行动.

然而,从Lollipop开始,一种新的设计模式已被允许容纳更大的文本.看看这里,向下滚动到Stacked全宽按钮.基本上,您可以将按钮放在堆栈中,并使用完整的对话框宽度.它并不能解决您的问题,因为您仍然只能使用全宽,但可以提供帮助.

至于如何做到这一点,我认为该AlertDialog课程并没有提供这方面的简单方法.一些建议:

  • 忘记positivenegative按钮,只需为没有按钮的对话框设置自定义视图.在该视图中,您可以拥有标题,消息和所需的所有按钮.
  • 使用这个很棒的,可以让您的对话框在旧设备上进行全新设计,并且有一个方便的方法forceStacking(),您可以阅读.它很容易实现.