Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有Android API可用于按下默认按钮/选择颜色?_Android_Button_Colors - Fatal编程技术网

是否有Android API可用于按下默认按钮/选择颜色?

是否有Android API可用于按下默认按钮/选择颜色?,android,button,colors,Android,Button,Colors,我正在尝试创建一个按钮,该按钮在默认状态下有一个自定义背景,但它仍然使用它所运行的任何设备所特有的按下/选定状态的颜色 从EditText源代码看,似乎没有这样的API,按下/选择的颜色只是硬编码的: public EditText(/*Context context, AttributeSet attrs, int defStyle*/) { super(/*context, attrs, defStyle*/); StateListDrawable mStateContai

我正在尝试创建一个按钮,该按钮在默认状态下有一个自定义背景,但它仍然使用它所运行的任何设备所特有的按下/选定状态的颜色

从EditText源代码看,似乎没有这样的API,按下/选择的颜色只是硬编码的:

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);
}
是否有人可以验证应用程序不可能知道当前设备上按下/选择的颜色

如果应用程序无法确定按下/选择的颜色是什么,那么就无法为按钮创建选择器,以在不同设备上匹配UI

似乎Android必须提供一种方法来找出这些颜色是什么,这样应用程序才能使用与它们运行的设备的UI一致的颜色

谢谢

-汤姆B

接下来,针对CaseyB的评论,我尝试了以下方法:

StateListDrawable d = new StateListDrawable();
d.addState(android.R.attr.state_enabled, getResources().getDrawable(R.drawable.my_custom_background));
myButton.setBackgroundDrawable(d);

但它会使按钮对所有状态使用自定义背景。似乎没有办法告诉StateListDrawable为已按下/选定的状态使用默认的drawable。

您应该使用一个有状态的drawable,并让它为这些状态使用默认的drawable。

最简单的方法是为从中继承的按钮创建自定义样式
android:style/Widget.Button
并将
android:background
添加到您的自定义样式中。

谢谢您的回复,但实际上我正在尝试将按钮的背景设置为默认状态。如果创建自定义样式并设置android:background属性,则该背景将用于所有按钮状态,包括按下和选中。我正在尝试只为默认状态设置自定义背景,并保留默认按下/选定状态的可绘制内容。我相信您可以为按钮的不同状态设置不同背景如何使用这种方法为按钮的不同状态设置不同背景?如果在自定义样式中添加带有
android:background
的项目,这将覆盖作为选择器的按钮背景,因此所有选定状态都将丢失。否?感谢您的回复,但是创建一个有状态的可绘制文件并不会自动包含按下/选定状态的默认可绘制文件。我用我测试过的有状态的可绘制代码更新了我的原始帖子。