为什么我的按钮不显示设定样式?

时间:2019-01-31 18:09:30

标签: android android-layout android-styles

我尝试更改按钮的样式,但是它根本不显示设置的样式。它仅显示“默认”矩形样式。我阅读了“样式和主题”官方的android文档,问题不在于样式层次结构。这是我的布局文件

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
 xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context=".MainActivity">

<Button
    android:id="@+id/button"
    style="@android:style/Widget.Button.Toggle"
    android:layout_width="125dp"
    android:layout_height="155dp"
    android:layout_marginBottom="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:background="@android:color/holo_red_light"
    android:visibility="visible"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.74" />
</android.support.constraint.ConstraintLayout>

和我的styles.xml

<resources>

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

我还在onCreate()函数中使用上面的布局文件设置了内容视图。好像找不到@android:style资源?请帮助

我也运行了干净的项目并得到了

W/ResourceType(15056): For resource 0x0101053d, entry index(1341) is beyond 
type entryCount(1320)
W/ResourceType(15056): For resource 0x0101053e, entry index(1342) is beyond 
type entryCount(1320)
W/ResourceType(15056): For resource 0x0101053b, entry index(1339) is beyond 
type entryCount(1320)
W/ResourceType(15056): For resource 0x0101053c, entry index(1340) is beyond 
type entryCount(1320)

3 个答案:

答案 0 :(得分:0)

在res / values / styles.xml中,您需要定义一个按钮样式,例如'MyButtonStyle'

<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- 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="MyButtonStyle" parent="Widget.AppCompat.Button">
    <item name="android:background">@drawable/button</item>
</style>

在res / drawable / button.xml中,定义按钮的基线样式,该基线样式定义为引用了按下状态和默认状态(例如)的选择器。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/button_pressed"/>
    <item android:drawable="@drawable/button_normal"/>
</selector>

在res / drawable / button_normal中

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
   android:shape="rectangle">
<stroke android:width="1dp"
        android:color="@color/buttonDarkShade"/>
<gradient
    android:type="linear"
    android:angle="90"
    android:startColor="@color/buttonDarkShade"
    android:centerColor="@color/buttonHighlightShade"
    android:endColor="@color/buttonDarkShade"
    />
</shape>

在res / drawable / button_pressed中

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
   android:shape="rectangle">

<stroke android:width="4dp"
        android:color="@color/colorPrimaryDark"/>
<gradient
    android:type="linear"
    android:angle="90"
    android:startColor="@color/colorPrimary"
    android:centerColor="@color/buttonHighlightShade"
    android:endColor="@color/colorPrimary"
    />
<corners android:radius="16dp" />
</shape>

这是制作自定义按钮的基本模板。定义上面使用的分辨率/值/颜色,并根据需要更改或添加选择器和形状属性。

当然,当您在布局中使用按钮样式时,请记住要设置样式

<Button
    android:id="@+id/myCustomStylishButton"
    style="@style/MyButtonStyle"/>

答案 1 :(得分:0)

我发现source code包含样式“ Widget.Button.Toggle”。看来这是一种旧样式,我想不可能将其与AppCompat应用主题一起使用。

我这么认为的一个原因是因为链接的存储库在其路径中具有名称“ gingerbread”,另一个原因是我的Android Studio(3.3)不知道样式-如果我尝试使用它,则文本变成红色。

但是您说您无法成功应用任何样式。因此,我将您的代码段复制到示例应用程序中,并执行以下操作:

第1步:在 res / values / styles.xml 中声明样式,并尝试将其与Button一起使用:

<style name="MyButtonStyle">
    <item name="android:textColor">#00ff00</item>
</style>

activity_main.xml

<Button
    android:id="@+id/button"
    style="@style/MyButtonStyle"
    android:layout_width="125dp"
    android:layout_height="155dp"
    android:background="@android:color/holo_red_light"
    android:visibility="visible"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.74"
    android:text="Hello World"/>

结果:

enter image description here

步骤2 Button(例如Widget.AppCompat.Button.Borderless.Colored)一起使用已知的AppCompat样式。 (即使背景的无边界Button听起来有点自相矛盾,我也只是简单地说明了背景的作用)

<Button
    android:id="@+id/button"
    style="@style/Widget.AppCompat.Button.Borderless.Colored"
    android:layout_width="125dp"
    android:layout_height="155dp"
    android:background="@android:color/holo_red_light"
    android:visibility="visible"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.74"
    android:text="Hello World"/>

结果:

enter image description here

第3步(比其他两个可选项更多),选择一些AppCompat Button样式,尝试使其正常运行,如果遇到错误,请返回此处。

(一般建议:如有必要,将Android Studio更新到当前的稳定版本,并确保您不要在模块的 build.gradle 文件的依赖项闭合中混用AndroidX库和支持库)< / p>

答案 2 :(得分:0)

非常感谢您的回答,但我发现我所要寻找的是将ImageButton小部件添加到xml表中,而不是Button小部件