如何使按钮的前景属性在 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 下工作?的主要内容,如果未能解决你的问题,请参考以下文章