我正在练习在按下另一个按钮时更改按钮颜色,但每次按下按钮更改颜色按钮也会放大。我需要在XML中定义一些东西,以便在按下时保持按钮大小不变吗?我也想知道相对与线性布局是否会对此产生影响?
CODE:
private Button back;
private Button front;
private Button b1;
private Button b2;
Button[] buttons = new Button[4];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
front = (Button) findViewById(R.id.front);
back = (Button) findViewById(R.id.back);
b1 = (Button) findViewById(R.id.b1);
b2 = (Button) findViewById(R.id.b2);
buttons[0] = front;
buttons[1] = back;
buttons[2] = b1;
buttons[3] = b2;
front.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
for(int i = 0; i < buttons.length; i++) {
if (buttons[i] == buttons[2]) {
buttons[i].setBackgroundColor(Color.GREEN);
}
else
buttons[i].setBackgroundColor(Color.GRAY);
}
return false;
}
});
}
}
XML:
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<Button
android:id="@+id/front"
android:layout_width="75dp"
android:layout_height="75dp"
android:text="Front"/>
<Button
android:id="@+id/back"
android:layout_toRightOf="@+id/front"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Back"/>
<Button
android:id="@+id/b1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="b1"
android:layout_alignLeft="@+id/front"
android:layout_below="@+id/front" />
<Button
android:id="@+id/b2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="b2"
android:layout_below="@+id/b1"
android:layout_alignLeft="@+id/b1"/>
答案 0 :(得分:0)
您可能会尝试设置backgroundTint
而不是backgroundColor。 backgroundColor
为视图提供背景颜色,而不是按钮。然而,backgroundTint为按钮本身提供了一种颜色
设置后,您必须使用BackgroundTintList
,但您可以使用ColorStateList.valueOf(Color.MY_COLOR)
提供颜色。
所以你的代码应该是
if (buttons[i] == buttons[2]) {
buttons[i].setBackgroundTintList(ColorStateList.valueOf(Color.GREEN));
}
else
buttons[i].setBackgroundTintList(ColorStateList.valueOf(Color.GRAY));
希望这能帮到你!
答案 1 :(得分:0)
默认按钮背景drawable有某种边距。当您更改按钮的颜色时,这些按钮边距具有透明颜色,然后透明颜色将更改为您指定的新颜色,然后按钮尺寸将被放大。 Use this更改按钮的颜色。