通过样式更改Android Dialog按钮文本大小

时间:2014-02-05 05:27:09

标签: android android-layout android-theme android-dialog android-styles

我正在尝试通过样式扩大所有应用程序对话框按钮上的文本大小。以下代码将更改按钮背景颜色甚至文本大小写,但由于某种原因,textSize项目不受尊重:

<style name="MyAppTheme" parent="@android:style/Theme.Holo">
    <item name="android:dialogTheme">@style/MyApp.Dialog</item>
    <item name="android:alertDialogTheme">@style/MyApp.Dialog.Alert</item>
</style>

<style name="MyApp.Dialog" parent="@android:style/Theme.Holo.Dialog">
    <item name="android:borderlessButtonStyle">@style/MyApp.BorderlessButton</item>
</style>

<style name="MyApp.Dialog.Alert" parent="@style/MyApp.Dialog">
    <item name="android:windowBackground">@android:color/transparent</item>
</style>

<style name="MyApp.BorderlessButton" parent="@android:style/Widget.Holo.Button.Borderless">
    <item name="android:textSize">50sp</item>
    <item name="android:textAllCaps">true</item>
    <item name="android:background">#800</item>
</style>

Dialog button with background colour and textAllCaps but no text size

为什么没有读取textSize?我需要做些什么来扩大它?

4 个答案:

答案 0 :(得分:5)

您没有在此处指定正确的属性:

<style name="MyApp.Dialog" parent="@android:style/Theme.Holo.Dialog">
====>    <item name="android:borderlessButtonStyle">@style/MyApp.BorderlessButton</item>
</style>

您需要使用的属性是:

android:buttonStyle

我建议进行以下更改:

<style name="MyApp.Dialog" parent="@android:style/Theme.Holo.Dialog">
    <item name="android:buttonStyle">@style/MyApp.BorderlessButton</item>
</style>

为什么:

borderlessButtonStyle是一种方便定义的风格。但它目前没有连接到任何默认属性 - 在本例中为buttonStyle。你仍然需要分配它。

我无法弄清楚为什么backgroundtextAllCaps属性生效。发布对话框/警告对话框的xml可能会有所帮助。另外,你如何定义字符串 - “我同意”或“我同意”?

答案 1 :(得分:1)

AlertDialog中的按钮使用Holo中的android:buttonBarButtonStyle。覆盖主题/样式中的该属性,并设置android:minHeight="0dp"以包装内容,或者当然您可以提供自己的高度。

更正:我误读了标题。您当然可以在同一样式上设置android:textSize="32sp"来更改文本大小。

以下是框架中的布局:

<LinearLayout android:id="@+id/buttonPanel"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="@dimen/alert_dialog_button_bar_height"
    android:orientation="vertical"
    android:divider="?android:attr/dividerHorizontal"
    android:showDividers="beginning"
    android:dividerPadding="0dip">
    <LinearLayout
        style="?android:attr/buttonBarStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layoutDirection="locale"
        android:measureWithLargestChild="true">
        <Button android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_gravity="start"
            android:layout_weight="1"
            android:maxLines="2"
            style="?android:attr/buttonBarButtonStyle"
            android:textSize="14sp"
            android:minHeight="@dimen/alert_dialog_button_bar_height"
            android:layout_height="wrap_content" />
        <Button android:id="@+id/button3"
            android:layout_width="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_weight="1"
            android:maxLines="2"
            style="?android:attr/buttonBarButtonStyle"
            android:textSize="14sp"
            android:minHeight="@dimen/alert_dialog_button_bar_height"
            android:layout_height="wrap_content" />
        <Button android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_gravity="end"
            android:layout_weight="1"
            android:maxLines="2"
            android:minHeight="@dimen/alert_dialog_button_bar_height"
            style="?android:attr/buttonBarButtonStyle"
            android:textSize="14sp"
            android:layout_height="wrap_content" />
    </LinearLayout>
 </LinearLayout>

答案 2 :(得分:0)

我知道这不是你问题的答案,但为什么你不想让Activity看起来像Dialog?我遇到了和你一样的问题,并且设计Android Dialog真的很痛苦。使用Activity,您可以将任何您想要的内容作为xml内容并根据需要进行样式设置。您还有ActionBar,因此您可以向Dialog添加菜单,并在ActionBar中使用自定义视图。也许现在是时候将您的Android对话框改为Activity样式为Dialog

答案 3 :(得分:-2)

试试这种风格:

<style name="MyApp.BorderlessButton" parent="@android:style/Widget.Holo.Button.Borderless">
   <item name="android:textSize">50sp</item>
   <item name="android:textAllCaps">true</item>
   <item name="android:background">#800</item>
</style>