如何使按钮的前景属性在 API 23 下工作?

Posted

技术标签:

【中文标题】如何使按钮的前景属性在 API 23 下工作?【英文标题】:How do I make the foreground attribute for a button work below API 23? 【发布时间】:2016-10-25 02:12:11 【问题描述】:

我有两个 Buttons 嵌套在 LinearLayout 中。在这些Buttons 之间有两个TextViews。在Xml 中,我为每个Buttons 设置了前景图像。

Api 23 在我的设备上运行良好。但是在Api 23 以下的其他设备上,前景图像不会显示,而是会导致默认的白色纯色。有没有办法让这些图像使用Api 23 下方的前景显示?

我们已经尝试过FrameLayout,但它并没有达到我们想要的效果。 ImageButtons 会是解决此问题的更好方法吗?

我们应用程序的核心功能之一是,每次用户点击Button,大小都会增加,图像也会相应地拉伸。这是在代码中动态完成的。如果我使用ImageButtons,我需要每次设置高度和宽度的布局参数,而不是设置高度的一行代码。

任何提示将不胜感激!

编辑:我正在使用的代码 -

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_
    android:layout_
    android:weightSum="11"
    android:background="@android:color/black">

    <Button
        android:layout_weight="5"
        android:id="@+id/firstP"
        android:layout_
        android:layout_
        android:layout_gravity="top"
        android:foreground="@drawable/icebutton"
        android:scaleX="1"
        android:scaleY="1"/>

    <TextView
        android:layout_weight="0.5"
        android:id="@+id/firstPlayer"
        android:gravity="center"
        android:layout_
        android:layout_
        android:rotation="180"
        android:textColor="@android:color/white"
        android:background="@android:color/transparent"/>

    <TextView
        android:layout_weight="0.5"
        android:id="@+id/secondPlayer"
        android:gravity="center"
        android:layout_
        android:layout_
        android:textColor="@android:color/white"
        android:background="@android:color/transparent"/>

    <Button
        android:layout_weight="5"
        android:id="@+id/secondP"
        android:layout_
        android:layout_
        android:layout_gravity="bottom"
        android:foreground="@drawable/firebutton"
        android:scaleX="1"
        android:scaleY="1"/>

</LinearLayout>

【问题讨论】:

你能给我们看看你的代码吗! 我已经添加了我正在使用的代码。我目前正在尝试实施ImageButtons@Micho 感谢您的编辑。以后我会确保格式正确。 【参考方案1】:

我们发现有两个问题导致图片无法显示。 1. 图片文件太大,造成outOfMemory错误,导致按钮不显示图片。 2. foreground 属性不适用于 API 22 及以下版本。

解决这些问题的步骤: 1.我们减小了图像文件的大小。 2. 我们将Button 替换为ImageButton 3.在XML文件中我们去掉了foreground属性,添加了黑色背景,通过src属性添加了图片。下面是一个sn-p。

<ImageButton
    android:layout_weight="5"
    android:id="@+id/firstP"
    android:layout_
    android:layout_
    android:layout_gravity="top"
    android:src="@drawable/icebutton"
    android:scaleType="fitXY"
    android:background="@android:color/black"/>
    然后,我们必须更改代码以动态调整按钮的高度,以通过设置LayoutParams 来匹配新的图像按钮:how to change size of button dynamic in android

现在一切正常!

【讨论】:

API 22!那是我的问题。正在运行 21 进行测试。谢谢。

以上是关于如何使按钮的前景属性在 API 23 下工作?的主要内容,如果未能解决你的问题,请参考以下文章

如何样式按钮悬停并单击前景?

如何使 NSWindow 中的按钮在工作表上时可点击

按下按钮后如何使“提交”表单从 Ajax 工作

当我们滑过它时如何使按钮执行? (在安卓工作室)

如何使表格视图单元格中的按钮工作[重复]

如何使 CMFCToolBarComboBoxButton 能够在垂直模式下工作?