200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > android 自定义button android – 如何添加自定义按钮状态

android 自定义button android – 如何添加自定义按钮状态

时间:2020-05-29 11:23:42

相关推荐

android 自定义button android  – 如何添加自定义按钮状态

@(Ted Hopp)指出的解决方案有效,但需要稍微纠正:在选择器中,项状态需要一个“app:”前缀,否则inflater将无法正确识别命名空间,并将无声地失败;至少这是发生在我身上的事情.

请允许我在此报告整个解决方案,并提供更多详细信息:

首先,创建文件“res / values / attrs.xml”:

然后定义您的自定义类.例如,它可能是一个类“FoodButton”,派生自“Button”类.你将不得不实现一个构造函数;实现这个,这似乎是inflater使用的那个:

public FoodButton(Context context, AttributeSet attrs) {

super(context, attrs);

}

在派生类之上:

private static final int[] STATE_FRIED = {R.attr.state_fried};

private static final int[] STATE_BAKED = {R.attr.state_baked};

另外,你的状态变量:

private boolean mIsFried = false;

private boolean mIsBaked = false;

还有几个二传手:

public void setFried(boolean isFried) {mIsFried = isFried;}

public void setBaked(boolean isBaked) {mIsBaked = isBaked;}

然后覆盖函数“onCreateDrawableState”:

@Override

protected int[] onCreateDrawableState(int extraSpace) {

final int[] drawableState = super.onCreateDrawableState(extraSpace + 2);

if (mIsFried) {

mergeDrawableStates(drawableState, STATE_FRIED);

}

if (mIsBaked) {

mergeDrawableStates(drawableState, STATE_BAKED);

}

return drawableState;

}

最后,这个拼图中最精致的部分;定义StateListDrawable的选择器,您将用作窗口小部件的背景.这是文件“res / drawable / food_button.xml”:

xmlns:app="/apk/res/com.mydomain.mypackage">

app:state_baked="true"

app:state_fried="false"

android:drawable="@drawable/item_baked" />

app:state_baked="false"

app:state_fried="true"

android:drawable="@drawable/item_fried" />

app:state_baked="true"

app:state_fried="true"

android:drawable="@drawable/item_overcooked" />

app:state_baked="false"

app:state_fried="false"

android:drawable="@drawable/item_raw" />

注意“app:”前缀,而对于标准的android状态,你会使用前缀“android:”. XML命名空间对于inflater的正确解释至关重要,并且取决于您添加属性的项目类型.如果是应用程序,请将com.mydomain.mypackage替换为应用程序的实际程序包名称(不包括应用程序名称).如果它是库,您必须使用“/apk/res-auto”(并使用Tools R17或更高版本),否则您将收到运行时错误.

几个笔记:

>看来你不需要调用“refreshDrawableState”函数,至少解决方案效果不错,就我的情况而言

>要在布局xml文件中使用自定义类,您必须指定完全限定名称(例如com.mydomain.mypackage.FoodButton)

>你可以用自定义状态混淆标准状态(例如android:press,android:enabled,android:selected),以表示更复杂的状态组合

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。