更改按钮颜色而不更改android中的形状

Joh*_*tor 5 android android-layout

当我说

 button.setBackgroundColor(Color.BLUE);
Run Code Online (Sandbox Code Playgroud)

按钮形状从默认形状更改为矩形.我想更改按钮颜色而不影响其原始形状.请帮我.

Yoa*_*uet 8

这是一个对我有用的解决方案,与已接受的解决方案相反,它允许您动态更改颜色:

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)


kar*_*arn 7

每当您更改按钮的默认背景时,形状将会更改,因为默认形状为矩形,默认背景为可绘制的圆角形状.如果您使用任何其他背景,则会丢失此圆角效果.

如果使用可绘制的形状作为背景,则可以使用任何颜色或形状实现相同的效果.
以下是如何实现这一目标:

  1. 创建一个可绘制的形状.
  2. 使用此drawable作为按钮的背景.


形状可绘制的示例代码:

<?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.
我希望这将有所帮助.