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

时间:2015-05-14 16:08:52

标签: android android-layout android-5.0-lollipop alertdialog

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

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

Android 4.4:

Android 4.4

Android L:

Android L

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

Alert dialog buttons problems in 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>

不幸的是,我在棒棒糖Alertdialog中看不到任何明显的变化,我仍然不太熟悉布局值,看看可能出现的问题。

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

谢谢!

2 个答案:

答案 0 :(得分:6)

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

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

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

  • 忘记positivenegative按钮,只需为没有按钮的对话框设置自定义视图。在该视图中,您可以拥有标题,消息您希望的所有按钮。
  • 使用这个出色的library,这将为您的对话框提供旧设备上的全新设计,并提供一个名为forceStacking()的便捷方法,您可以阅读。它很容易实现。

答案 1 :(得分:2)

我也遇到过类似的问题。我当时正在使用android.app.AlertDiaglog。刚改变了 导入到android.support.v7.app.AlertDialog。

支持导入做了神奇的事。