gpt4 book ai didi

java - 如何添加具有点击状态的用户可配置按钮?

转载 作者:行者123 更新时间:2023-12-02 13:11:14 25 4
gpt4 key购买 nike

我正在尝试在 Android 中制作一个按钮,该按钮具有边框,但按下时具有不同的背景色调,并且能够更改按钮背景的颜色。我知道adding a border为它分配一个形状,并且点击状态是通过具有不同项目的选择器,但问题是按钮背景颜色是由用户配置的。

没有点击状态,我可以允许用户通过执行以下操作来更改形状的背景颜色:

GradientDrawable bgShape = (GradientDrawable) btn.getBackground();
//color value is obtained from shared preferences
if (sharedPref.contains(pref_color)) {
String color = sharedPref.getString(pref_color, "");
bgShape.setColor(Color.parseColor(color));
}

但是如果我的按钮要分配一个选择器,我就无法执行第一行。我不知道如何获得对可绘制形状的引用。

作为引用,我的按钮边框形状是:

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

<stroke android:width="5px" android:color="#ffffff" />
</shape>

选择器看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:drawable="@drawable/button_press" android:state_pressed="true"/>
<item android:drawable="@drawable/button_border" />

</selector>

有办法实现这一点吗?

最佳答案

您可以为可绘制图层定义一个 id,然后在运行时更改其属性

LayerDrawable drawSettings = (LayerDrawable)
getResources().getDrawable(R.drawable.sample);
GradientDrawable backSettings = (GradientDrawable)
drawSettings.findDrawableByLayerId(R.id.backtemp);

更改颜色后将其重置为按钮背景

view.setBackground(drawable);

这是一个示例可绘制示例.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/backtemp">
<shape
android:shape="oval" >
<solid android:color="@color/default_color"/>
</shape>
</item>

<item
android:drawable="@drawable/w_pref">
</item>
</layer-list>

关于java - 如何添加具有点击状态的用户可配置按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43946636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com