Android主题样式未应用于按钮

17

我在我的主活动视图中有三个简单的按钮。

我想要做的是将一个按钮样式应用于所有的按钮,但我无法做到。

这是我的XML代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/minecraft_portrait"
    android:alpha="0.75"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/txtAppName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:text="@string/app_name_readable"
        android:textSize="32sp"
        android:textColor="@android:color/white" />

    <Button
        android:id="@+id/btnCrafting"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:background="@drawable/button_selector"
        android:onClick="craftingButtonClicked"
        android:text="@string/crafting" />

    <Button
        android:id="@+id/btnServerCommands"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@id/btnCrafting"
        android:layout_below="@id/btnCrafting"
        android:layout_marginTop="20dp"
        android:background="@drawable/button_selector"
        android:onClick="commandsButtonClicked"
        android:textColor="@android:color/white"
        android:text="@string/servercommands" />

    <Button
        android:id="@+id/btnVideos"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@id/btnServerCommands"
        android:layout_below="@id/btnServerCommands"
        android:layout_marginTop="20dp"
        android:background="@drawable/button_selector"
        android:onClick="videosButtonClicked"
        android:text="@string/videos" />

</RelativeLayout>

这是我从res/values文件夹中的style.xml:

<resources xmlns:android="http://schemas.android.com/apk/res/android">

    <style name="AppBaseTheme" parent="android:Theme.Light">
    </style>

    <!-- Application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">
        <item name="android:buttonStyle">@style/ButtonTheme</item>
    </style>

    <style name="ButtonTheme" parent="android:Widget.Button">
        <item name="android:textColor">@android:color/white</item>
        <item name="android:background">@android:color/darker_gray</item>
        <item name="android:typeface">monospace</item>
        <item name="android:textSize">32sp</item>
    </style>
</resources>

我的主题定义来自清单文件:

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
....

有什么想法为什么样式没有应用到我的按钮上吗? 我已经将一个按钮的文本颜色设置为白色,只是为了看到任何区别。


可能你的活动覆盖了应用程序主题。 - Bracadabra
3个回答

47

当使用支持库时,按钮样式必须应用为:

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
    <item name="android:buttonStyle">@style/ButtonTheme</item>
    <item name="buttonStyle">@style/ButtonTheme</item>
</style>

注意重复,但没有命名空间


成功了!请Robbie接受这个非常有帮助的答案。 - Niki Romagnoli
1
有了支持库,只需要非命名空间项即可使其工作。无需重复。 - yuval
我无法确认我的问题,因为我不再拥有源代码,但我现在知道应该这样做。谢谢。 - DerpyNerd
17
如果您正在使用Material Components,请使用 materialButtonStyle 属性代替 buttonStyle - Max

4

你发的代码是有效的。请在xml中为按钮添加样式,看看是否适用于你。

<Button
    style="@style/ButtonTheme"

    android:id="@+id/btnCrafting"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:background="@drawable/button_selector"
    android:onClick="craftingButtonClicked"
    android:text="@string/crafting" />

2
不,这种方式也不适用。 - DerpyNerd
2
从按钮中删除android:background="@drawable/button_selector",然后再试一次。我不确定为什么这不起作用。并且也在模拟器上尝试一下。 - Dragan
1
这个可以用,但我不想在所有的按钮中都添加这个。我想在一个地方将按钮样式添加到appTheme中。 - tzg

1
尝试在更改样式或清单文件时在项目上运行“clean”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接