自定义按钮样式显示在预览中,但不在设备上

时间:2018-09-03 15:19:03

标签: android android-layout android-xml

我为按钮制作了自定义样式。它完美地显示在Layout Preview中(通过Android Studio XML Preview),但是当我运行该应用程序时,该按钮没有想要的边框。

是否知道可能导致这种情况的原因?

activity_main.xml

<style name="Button.Pink" parent="Button">
    <item name="android:background">@drawable/rounded_corners_button</item>
    <item name="android:backgroundTint">@color/pink</item>
    <item name="android:textColor">@color/white</item>
</style>

styles.xml

<Button
    style="@style/Button.Pink"
    android:id="@+id/btn_sale"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="top|start"
    android:enabled="false"
    android:foreground="?attr/selectableItemBackground"
    android:text="@string/sale"
    android:layout_marginTop="4dp"
    android:layout_marginStart="4dp"
    android:visibility="gone"
    tools:visibility="visible" />

rounded_corners_button.xml

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

编辑: 添加渲染器的一些图片

XML预览版式设计显示的内容: enter image description here

应用显示的内容: enter image description here

3 个答案:

答案 0 :(得分:2)

尝试更改此行

<style name="Button.Pink" parent="Button">

收件人

 <style name="Button.Pink" parent="Widget.AppCompat.Button"> //AppCompat style to support backports.

已更新

如果您定位的是最低API 21,请尝试在支持库28中引入最新的Material按钮。

<android.support.design.button.MaterialButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Sale"
    app:backgroundTint="@color/colorAccent"
    app:cornerRadius="50dp"
    android:layout_marginEnd="8dp"
    android:layout_marginRight="8dp" />

答案 1 :(得分:0)

也许您只是忘记删除android:visibility =“ gone”? :)))

您为什么还要使用android:backgroundTintandroid:foreground? 也许您可以做些更简单的事情,例如

<shape xmlns:android="http://schemas.android.com/apk/res/android"
   android:shape="rectangle">
    <solid android:color="@android:color/"
    <corners android:radius="65dp" />
</shape>

还可以为其他状态创建形状,而不是创建一个选择器

答案 2 :(得分:-1)

使用以下代码,希望对您有帮助

按钮

 <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:textColor="#ffffff"
        android:background="@drawable/rounded_corners_button"
        android:text="Buttons" />

draweble中的rounded_corners_button

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item >
        <shape android:shape="rectangle"  >
            <corners android:radius="5dip" />
            <stroke android:width="1dip" android:color="#00FFFF" />
            <gradient android:angle="-90" android:startColor="#8dbab3" android:endColor="#58857e" />
        </shape>
    </item>
</selector>