Android API 21更改了我的自定义按钮背景

时间:2014-10-20 19:15:25

标签: android xml material-design

我正在测试Android上的API21应用程序!不幸的是,我的按钮看起来很奇怪 - 添加了某种背景颜色。背景图像没有变化 - 除边框外,它们完全透明。 (不同的文字和大小是由截图引起的。)

您可以在此处看到API 21之前和之后的按钮:http://imgur.com/9EEcl0o,yVEnJkI#0

我已经尝试过android:elevation =" 0dp"和android:background =" @android:color / transparent"。谁知道为什么我的按钮会改变?非常感谢你!

layout.xml:

<Button android:id="@+id/sm_achievements_btn"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="1.1"   
    android:background="@drawable/menu_btn_selector"
    android:onClick="showAchievements"
    android:text="@string/sm_achievements_btn"
    android:padding="@dimen/padding_std"
    android:layout_marginTop="@dimen/margin_small"
    android:textColor="@color/button_text"
    android:textSize="@dimen/text_xlarge"
    style="@style/lbm_button"/>

menu_btn_selector.xml:

<item android:drawable="@drawable/menu_button"
 android:state_pressed="false"/>

style.xml:

<style name="lbm_button" parent="android:Theme.Holo.Light">
    <item name="android:textAllCaps">false</item>
</style>

1 个答案:

答案 0 :(得分:5)

材质按钮具有默认的stateListAnimator,它提供基于状态的高程(例如,禁用时为0dp,启用时为1dp)。您可以通过设置android:stateListAnimator =&#34; @ null&#34;来清除它。以你的风格或直接在按钮上。

以下是按钮XML上的内容:

<Button android:id="@+id/sm_achievements_btn"
    ...
    android:textAllCaps="false"
    android:stateListAnimator="@null" />

此外,您使用了错误的父级作为按钮样式。您永远不应将主题设置为窗口小部件样式的父级。无论如何,如果您更喜欢这条路线,这应该是什么样的:

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

<style name="MyButtonStyle" parent="android:Widget.Material.Light.Button">
    <item name="android:textAllCaps">false</item>
    <item name="android:stateListAnimator">@null</item>
</style>