按下时更改按钮的背景颜色和文本颜色,如果再次按下则应交换背景颜色和文本颜色

时间:2017-04-05 15:02:23

标签: android button

我想在按下按钮时更改按钮的背景颜色和文本颜色(它应该保持在状态,直到再次按下按钮)。如果再次按下,我需要旧的按钮状态。 任何人都可以帮助我

这是截图(正常状态) enter image description here

某些按钮按下状态 enter image description here

以下是我试过的代码

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/beco_white"
        android:layout_marginTop="@dimen/dp10"
        android:orientation="horizontal">

        <FrameLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent">

            <FrameLayout
                android:id="@+id/button_oberon_mall"
                android:layout_width="92dp"
                android:layout_height="30dp"
                android:layout_marginLeft="@dimen/dp10"
                android:minWidth="92dp">

                <Button
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="@drawable/blue_rounded_corner_new"
                    android:text="Oberon Mall"
                    android:fontFamily="sans-serif-regular"
                    android:textAllCaps="false"
                    android:textColor="@color/beco_black"
                    android:textSize="13sp"/>

            </FrameLayout>
        </FrameLayout>

        <FrameLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent">

            <FrameLayout
                android:id="@+id/button_centre_square_mall"
                android:layout_width="134dp"
                android:layout_height="30dp"
                android:layout_marginLeft="@dimen/dp10"
                android:layout_marginRight="@dimen/dp10"
                android:minWidth="134dp">

                    <Button
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:background="@drawable/blue_rounded_corner_new"
                        android:text="Centre Square Mall"
                        android:fontFamily="sans-serif-regular"
                        android:textAllCaps="false"
                        android:textColor="@color/beco_black"
                        android:textSize="13sp"/>
            </FrameLayout>
        </FrameLayout>

        <FrameLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent" >

            <FrameLayout
                android:id="@+id/button_lulu_mall"
                android:layout_width="81dp"
                android:layout_height="30dp">

                <Button
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="@drawable/blue_rounded_corner_new"
                    android:text="Lulu Mall"
                    android:fontFamily="sans-serif-regular"
                    android:textAllCaps="false"
                    android:textColor="@color/beco_black"
                    android:textSize="13sp"/>
            </FrameLayout>
        </FrameLayout>

    </LinearLayout>

blue_round_corner_new.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:state_pressed="false">
<shape android:shape="rectangle">
    <!--apply button background transparent, full opacity-->
    <solid android:color="#dedfe0"/>
    <corners android:radius="15dp"/>
</shape>
</item >
<item
    android:state_pressed="true">
    <shape android:shape="rectangle">
        <!--apply button background transparent, full opacity-->
        <solid android:color="#4990d0"/>
        <corners android:radius="15dp"/>
    </shape>
</item>

在此代码中,按下背景颜色只会暂时改变(不保留状态)

任何人帮助我。对不起我的英文

3 个答案:

答案 0 :(得分:2)

我认为最好的选择是为每个按钮实现onTouchListener。

button.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()){
                    case MotionEvent.ACTION_UP:
                        break;
                    case MotionEvent.ACTION_DOWN:
                        break;
                }

                return false;
            }
        });

当你得到ACTION_UP或ACTION_DOWN时,你只需要改变背景

答案 1 :(得分:1)

最好你必须使用外部库来解决这个问题。以下库将帮助您解决问题

CheckableButton

AndroidCheckableButton

答案 2 :(得分:0)

有两种方法可以在屏幕上放置XML(您已使用过)或以编程方式。 尝试将blue_round corner.xml放在程序调用中,如果你想长时间保持(我认为你有多个屏幕并且切换屏幕保持按下按钮的状态)然后在onResume()函数中调用相同的保留它。

我认为它会起作用,如果您需要更多帮助,请发表评论