我尝试更改按钮的样式,但是它根本不显示设置的样式。它仅显示“默认”矩形样式。我阅读了“样式和主题”官方的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)
答案 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"/>
结果:
步骤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"/>
结果:
第3步(比其他两个可选项更多),选择一些AppCompat Button
样式,尝试使其正常运行,如果遇到错误,请返回此处。
(一般建议:如有必要,将Android Studio更新到当前的稳定版本,并确保您不要在模块的 build.gradle 文件的依赖项闭合中混用AndroidX库和支持库)< / p>
答案 2 :(得分:0)
非常感谢您的回答,但我发现我所要寻找的是将ImageButton小部件添加到xml表中,而不是Button小部件