按下时如何防止按钮变大

时间:2017-10-18 14:08:02

标签: android button

我正在练习在按下另一个按钮时更改按钮颜色,但每次按下按钮更改颜色按钮也会放大。我需要在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"/>

2 个答案:

答案 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更改按钮的颜色。