当我说
时 button.setBackgroundColor(Color.BLUE);
按钮形状从默认形状变为矩形。我想更改按钮颜色而不影响其原始形状。请帮帮我。
答案 0 :(得分:7)
每当您更改按钮的默认背景时,形状将会更改,因为默认形状为矩形,默认背景为可绘制的圆角形状。如果您使用任何其他背景,则会丢失此圆角效果。
如果使用可绘制的形状作为背景,则可以使用任何颜色或形状获得相同的效果。
以下是如何实现这一点:
形状可绘制的示例代码:
<?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>
如果您想要一个带选择器的按钮,请使用此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>
这是一个选择器xml,项目作为不同的形状drawables。如果按下按钮,即按钮的状态为 state_pressed ,则使用顶部形状drawable,否则使用底部形状drawable。 我希望这会有所帮助。
答案 1 :(得分:7)
这是一个对我有用的解决方案,与已接受的解决方案相反,它允许您动态更改颜色:
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);
}
&#34; round_button&#34;的XML我使用过drawable,例如:
<?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>
答案 2 :(得分:1)
几分钟前我遇到了同样的问题。
在布局文件的XML中使用android:backgroundTint
属性将解决此问题。
按钮将保持原始形状,同时也不会丢失涟漪效果。
XML应该类似于:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click Me!"
android:textColor="#FFF"
android:backgroundTint="#2196f3" />
答案 3 :(得分:0)
默认使用颜色对象时,android系统使用绘图对象填充按钮 并且绘制对象只能填充矩形,圆形而不是曲线 如果您真的想要使用自定义视图(画布)来表示具有颜色和曲线形状的按钮
答案 4 :(得分:0)
答案 5 :(得分:0)
在layout.xml中查看此内容
机器人:背景= “*****”
答案 6 :(得分:0)
这对我有用 - 在运行时/动态变化。例如,单击按钮时,颜色会发生变化,但其形状需要保持不变。
首先,您需要在xml中定义按钮:
<Button
android:id="@+id/myButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/buttonshape"
android:text="Change Colour but keep shape, please" />
您将在上面看到它调用buttonshape
,因此在drawable
文件夹中:
(这是一个矩形,灰色,深灰色边框为1dp
)
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#D3D3D3" />
<corners android:radius="3dp" />
<stroke
android:width="1dp"
android:color="#aeaeae" />
</shape>
现在xml
文件夹drawable
中的新buttonpressed.xml
文件,用于按下按钮状态。颜色将是绿色,其他一切都是相同的。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
android:shape="rectangle">
<solid android:color="#2AB40E" />
<corners android:radius="3dp" />
<stroke
android:width="1dp"
android:color="#aeaeae" />
</shape>
现在,点击按钮点击我们的活动:
private void myButton() {
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// keep the slightly rounded shape, when the button is pressed
myButton.setBackgroundResource(R.drawable.buttonpressed);
etc..etc...
答案 7 :(得分:0)
这是一个古老的问题,但是对于将来的求职者来说,这对我有用...
在可绘制按钮形状中:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners
android:bottomRightRadius="10dp"
android:bottomLeftRadius="10dp"
android:topRightRadius="10dp"
android:topLeftRadius="10dp" />
</shape>
在我的layout.xml中,该按钮:
<Button
android:id="@+id/button"
android:layout_width="150dp"
android:layout_height="38dp"
android:layout_marginEnd="20dp"
android:layout_marginBottom="20dp"
android:background="@drawable/buttonshape"
android:backgroundTint="@color/colorButtonOrange"
android:text="@string/button_text"
android:textColor="@color/colorWhite"/>
使用android:backgroundTint
,活动开始时,按钮的颜色为橙色。
在“活动”中,我仅更改一行按钮的颜色:
button.getBackground().setColorFilter(Color.GREY, PorterDuff.Mode.SRC_ATOP);
答案 8 :(得分:0)
使用“ setBackgroundColor”更改视图的形状时,我遇到了同样的问题。 我用“ setTint”解决了