【问题标题】:Custom Button style is appearing in preview but not on device自定义按钮样式出现在预览中,但不在设备上
【发布时间】:2018-09-03 15:19:03
【问题描述】:

我为我的按钮制作了自定义样式。它完美地出现在 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 预览布局设计显示的内容:

应用程序显示的内容:

【问题讨论】:

  • 您正在检查哪个版本的 api?
  • 分钟 21,目标 api 28

标签: android android-layout android-xml


【解决方案1】:

尝试更改此行

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

收件人

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

更新

如果您的目标是 min api 21,那么请尝试支持库 28 中引入的最新材料按钮..

<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" />

【讨论】:

  • 感谢您的回答,但仍然无法正常工作。我将添加一些图片来显示我的问题
  • @Kamil 检查我的更新答案,您可以简单地添加上面的材料代码。默认按钮颜色是您的主题强调色。
  • 非常感谢,这解决了我的问题 :)
  • @Kamil 欢迎很高兴为您提供帮助..!快乐编码:)
【解决方案2】:

也许您只是忘记删除 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>

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

【讨论】:

  • 感谢您的回答。我以编程方式将其可见性设置为可见。我忘了提那个。我使用这两个属性来保持我的粉红色背景颜色和按钮触摸时的波纹
【解决方案3】:

使用下面的代码,希望对你有帮助

按钮

 <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>

【讨论】:

  • 感谢您的回答。代码似乎正在处理布局,但仍未在应用程序上显示边框
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-09
  • 2015-08-07
  • 1970-01-01
  • 2015-09-26
  • 1970-01-01
  • 2015-10-30
  • 1970-01-01
相关资源
最近更新 更多