Joh*_*tor 5 android android-layout
当我说
button.setBackgroundColor(Color.BLUE);
Run Code Online (Sandbox Code Playgroud)
按钮形状从默认形状更改为矩形.我想更改按钮颜色而不影响其原始形状.请帮我.
这是一个对我有用的解决方案,与已接受的解决方案相反,它允许您动态更改颜色:
myButton = (ImageButton)myView.findViewById(R.id.my_button);
Drawable roundDrawable = getResources().getDrawable(R.drawable.round_button);
roundDrawable.setColorFilter(Color.BLUE, Mode.SRC_ATOP);
if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) {
myButton.setBackgroundDrawable(roundDrawable);
} else {
myButton.setBackground(roundDrawable);
}
Run Code Online (Sandbox Code Playgroud)
我使用的"round_button"drawable的XML,作为一个例子:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#4db6ac"/>
</shape>
Run Code Online (Sandbox Code Playgroud)
每当您更改按钮的默认背景时,形状将会更改,因为默认形状为矩形,默认背景为可绘制的圆角形状.如果您使用任何其他背景,则会丢失此圆角效果.
如果使用可绘制的形状作为背景,则可以使用任何颜色或形状实现相同的效果.
以下是如何实现这一目标:
形状可绘制的示例代码:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid
android:color="#f8f8f8"/>
<corners
android:radius="4dp"/>
<padding
android:left="10dp"
android:right="10dp"
android:top="5dp"
android:bottom="5dp"/>
<stroke
android:width="1dp"
android:color="#aeaeae"/>
</shape>
Run Code Online (Sandbox Code Playgroud)
如果您想要一个带选择器的按钮,请使用此xml作为背景
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true">
<shape >
<solid
android:color="#ff0000" />
<stroke
android:width="1dp"
android:color="#ff0000" />
<corners
android:radius="4dp" />
<padding
android:left="10dp"
android:right="10dp"
android:top="10dp"
android:bottom="10dp" />
</shape>
</item>
<item >
<shape >
<gradient
android:startColor="#ff2727"
android:endColor="#890000"
android:angle="270" />
<stroke
android:width="1dp"
android:color="#620000" />
<corners
android:radius="4dp" />
<padding
android:left="10dp"
android:right="10dp"
android:top="10dp"
android:bottom="10dp" />
</shape>
</item>
</selector>
Run Code Online (Sandbox Code Playgroud)
这是一个选择器xml,项目作为不同的形状drawables.如果按下按钮,则按钮的状态为state_pressed,则使用顶部形状drawable,否则使用底部形状drawable.
我希望这将有所帮助.