gpt4 book ai didi

android - 如何在不影响按下和选择状态的情况下修改Android中的默认按钮状态?

转载 作者:搜寻专家 更新时间:2023-11-01 07:40:48 24 4
gpt4 key购买 nike

我试图仅在默认状态下删除 ImageButton 的背景。我希望按下和选定状态的行为像往常一样,以便它们在不同设备上看起来正确,这些设备对按下和选定状态使用不同的颜色。

有没有办法在不影响按下和选中状态的情况下设置 ImageButton 的背景默认状态的可绘制对象?

我已经尝试使用选择器来完成此操作,但它似乎不允许您对某些状态使用默认可绘制对象 - 您必须自己设置所有状态。由于没有 API 来检索设备的默认按下/选定可绘制对象,我不知道将按下/选定状态设置为什么。

我还尝试获取系统在您不使用选择器时创建的按钮的 StateListDrawable 对象,然后修改它以更改默认状态。那也没用。

我似乎在 Android 上,如果你想更改按钮的一种状态的 drawable,那么你必须设置所有状态,因此不能保留其他状态的默认 drawable。这是正确的吗?

谢谢!-汤姆 B.

最佳答案

汤姆,

的确,如果您覆盖默认状态,您还必须覆盖按下和聚焦状态。原因是默认的 android drawable 是一个选择器,因此用静态 drawable 覆盖它意味着您丢失了按下和聚焦状态的状态信息,因为您只为其指定了一个 drawable。不过,实现自定义选择器非常容易。做这样的事情:

<selector
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/custombutton">

<item
android:state_focused="true"
android:drawable="@drawable/focused_button" />
<item
android:state_pressed="true"
android:drawable="@drawable/pressed_button" />
<item
android:state_pressed="false"
android:state_focused="false"
android:drawable="@drawable/normal_button" />
</selector>

将它放在您的可绘制对象目录中,并像普通可绘制对象一样加载它作为 ImageButton 的背景。对我来说最难的部分是设计实际图像。

编辑:

刚刚深入研究了 EditText 的源代码,这就是他们设置背景可绘制对象的方式:

public EditText(/*Context context, AttributeSet attrs, int defStyle*/) {
super(/*context, attrs, defStyle*/);

StateListDrawable mStateContainer = new StateListDrawable();

ShapeDrawable pressedDrawable = new ShapeDrawable(new RoundRectShape(10,10));
pressedDrawable.getPaint().setStyle(Paint.FILL);
pressedDrawable.getPaint().setColor(0xEDEFF1);


ShapeDrawable focusedDrawable = new ShapeDrawable(new RoundRectShape(10,10));
focusedDrawable.getPaint().setStyle(Paint.FILL);
focusedDrawable.getPaint().setColor(0x5A8AC1);

ShapeDrawable defaultDrawable = new ShapeDrawable(new RoundRectShape(10,10));
defaultDrawable.getPaint().setStyle(Paint.FILL);
defaultDrawable.getPaint().setColor(Color.GRAY);



mStateContainer.addState(View.PRESSED_STATE_SET, pressedDrawable);
mStateContainer.addState(View.FOCUSED_STATE_SET, focusedDrawable);
mStateContainer.addState(StateSet.WILD_CARD, defaultDrawable);

this.setBackgroundDrawable(mStateContainer);
}

我相信您可以根据您的目的调整这个想法。这是我找到它的页面:

http://www.google.com/codesearch/p?hl=en#ML2Ie1A679g/src/android/widget/EditText.java

关于android - 如何在不影响按下和选择状态的情况下修改Android中的默认按钮状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3859144/

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