【问题标题】:Android button background color changes button sizeAndroid按钮背景颜色改变按钮大小
【发布时间】:2015-09-09 13:50:31
【问题描述】:

我正在为我的 Android 应用使用内置主题:

<style name="AppTheme" parent="android:Theme.Black">
    <!-- Customize your theme here. -->
</style>

我对这个主题很满意,但我想更改按钮的背景颜色。以下是它的默认外观:

当我向这个按钮添加背景颜色时会发生以下情况 (android:background="@color/play_bg"):

嘿!?它基本上改变了所有按钮的大小、内边距和边距!

所以我设法使用backgroundTint 属性(android:backgroundTint="@color/play_bg")获得了预期的结果:

不幸的是,这仅从 API 21 版开始受支持,这对我来说是不可接受的。

那么两个问题:

  • 为什么更改背景会影响按钮的其他属性?
  • 如果没有backgroundTint,我如何获得预期的结果?

还有一个额外的问题:如何以编程方式获得预期结果(我的应用中有动态按钮,所以这将非常有用)?

【问题讨论】:

    标签: java android button styles


    【解决方案1】:

    在我的情况下,我将在这个过程中做

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="3dp"
        android:background="@color/play_as"
        android:padding="8dp"
        android:text="Button" />
    

    或者你可以使用这个link,它更容易创建按钮

    【讨论】:

      【解决方案2】:

      您可以在 Java 文件中更改此颜色。当您的主类加载时,您可以获取此按钮的对象,然后更改颜色。

      这是您在清单文件中定义此按钮的方式:

      <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="PLAY"
      android:id="@+id/btn1"
      ... />
      

      现在在您的 Java 文件中,当您添加此 XML 布局时,您需要

      Button b = (Button)findViewByID(R.id.btn1);
      b.getBackground().setColorFilter(0xFFFF0000,PorterDuff.Mode.MULTIPLY);
      

      您也可以使用颜色: 红色 下面的代码有时对我不起作用:- b.setBackgroundColor(int color)

      【讨论】:

      • 不错。有用!为了完整起见,您能解释一下PorterDuff.mode.MULTIPLY 的作用吗?另外,您知道为什么 android:background="@color/..." 的“直观”解决方案不起作用吗?
      • 我们在设计Graphic Application时主要使用PorterDuff。 PorterDuff 被描述为一种组合图像的方式,就好像它们是相互重叠的“不规则形状的纸板”,以及一种混合重叠部分的方案。这是我发现可以更好地解释你的文章:ssp.impulsetrain.com/porterduff.html java.lang.Object ↳ java.lang.Enum ↳ android.graphics.PorterDuff.Mode 参考:developer.android.com/reference/android/graphics/…
      • 关于您的问题为什么您的本机方法不起作用:当您使用背景时,文本所在部分的背景发生了变化。背景取决于您使用的文本大小。对于整个背景更改,您可能需要 setColorFiller(Color.RED)
      猜你喜欢
      • 1970-01-01
      • 2015-10-29
      • 1970-01-01
      • 1970-01-01
      • 2013-08-06
      • 2015-10-25
      • 2021-07-05
      • 1970-01-01
      • 2015-06-04
      相关资源
      最近更新 更多