gpt4 book ai didi

java - Android 开发者上的 CustomButton

转载 作者:行者123 更新时间:2023-12-05 05:32:45 25 4
gpt4 key购买 nike

我一直在开发我的游戏,我有大量的图像按钮 我想从你们那里得到一些建议,有没有一种替代方法可以简化按钮状态,因为我想拥有按钮外观发生变化的功能当用户按下它时

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:drawable="@drawable/setting1"
/>
<item
android:drawable="@drawable/setting"
/>
</selector>

就像现在我的项目中有很多这样的东西,希望有另一种方法 my polluted drawable folder

最佳答案

您可以创建一个自定义 ImageButton 并使用 StateListDrawable 以编程方式创建所有按钮状态,而不是拥有大量可绘制的 xml 选择器。 .示例如下所示:

首先创建从 AppCompatImageButton 扩展而来的 CustomButton,如下所示:

public class CustomButton extends androidx.appcompat.widget.AppCompatImageButton {

public CustomButton(@NonNull Context context) {
super(context);
init(context, null, 0);
}

public CustomButton(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(context, attrs, 0);
}

public CustomButton(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs, defStyleAttr);
}

private void init(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr){

TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.CustomButton, defStyleAttr, 0);
try {
int defaultDrawableResId = typedArray.getResourceId(R.styleable.CustomButton_drawable_default, -1);
int pressedDrawableResId = typedArray.getResourceId(R.styleable.CustomButton_drawable_pressed, -1);

StateListDrawable stateListDrawable = new StateListDrawable();
if(pressedDrawableResId!=-1) {
stateListDrawable.addState(new int[]{android.R.attr.state_pressed}, ContextCompat.getDrawable(context, pressedDrawableResId));
}
if(defaultDrawableResId!=-1) {
stateListDrawable.addState(new int[]{}, ContextCompat.getDrawable(context, defaultDrawableResId));
}
setBackground(stateListDrawable);
}
catch (Exception e){
Log.e("CustomButton", e.getMessage());
}
finally {
typedArray.recycle();
}
}
}

res>values>attrs.xml 下声明 CustomButton 样式,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="CustomButton">
<attr name="drawable_default" format="reference" />
<attr name="drawable_pressed" format="reference" />
</declare-styleable>
</resources>

然后在每个需要的布局中使用此 CustomButton,只需添加两个状态的可绘制对象(按下|默认)app:drawable_defaultapp:drawable_pressed 就像下面的示例布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.my.packagename.CustomButton
android:layout_width="80dp"
android:layout_height="80dp"
app:drawable_default="@drawable/settings"
app:drawable_pressed="@drawable/settings1"/>

</RelativeLayout>

这将消除您所有的 xml 可绘制选择器,并使您能够重用 CustomButton 中使用的任何 UI 和任何逻辑。

关于java - Android 开发者上的 CustomButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74010262/

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