可绘制选择器+ TextColor



输入图片描述

在上图中,2个按钮有相同的可绘制选择器。第一个是没按的时候,另一个是按的时候。我如何改变TextColor取决于按下的状态这是布局

   <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="40dp">
       <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="40dp">
            <LinearLayout
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:background="@drawable/buttonback"
                android:clickable="true"
                android:id="@+id/l1"
                android:onClick="dialog">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Individual"
                    android:id="@+id/t1"
                    android:layout_gravity="center"
                    android:textSize="18dp"
                    android:textStyle="bold"
                    android:textAlignment="center"
                    android:onClick="dialog"
                    android:textColor="#000000" />
               <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="SR 19.99/month after trial ends"
                android:id="@+id/t2"
                android:layout_gravity="center"
                android:textSize="16dp"
                android:textAlignment="center"
                android:onClick="dialog"
                android:textColor="#898989" />
        </LinearLayout>
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:background="@drawable/buttonback"
            android:layout_marginTop="25dp"
            android:clickable="true"
            android:id="@+id/l2"
            android:onClick="dialog">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Family (Up to 6 members)"
                android:id="@+id/t3"
                android:layout_gravity="center"
                android:textSize="18dp"
                android:textStyle="bold"
                android:textAlignment="center"
                android:onClick="dialog"
                android:textColor="#000000" />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="SR 29.99/month after trial ends"
                android:id="@+id/t4"
                android:layout_gravity="center"
                android:textSize="16dp"
                android:textAlignment="center"
                android:onClick="dialog"
                android:textColor="#898989" />
        </LinearLayout>
    </LinearLayout>

这是可绘制的选择器

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_pressed="true">
    <shape android:shape="rectangle"
        xmlns:android="http://schemas.android.com/apk/res/android">
        <stroke android:color="#ff395d" android:width="1dp"></stroke>
        <solid android:color="#ff395d"></solid>
        <corners android:radius="60dp"></corners>
        <padding
            android:top="15dp"
            android:right="15dp"
            android:left="15dp"
            android:bottom="15dp"
            ></padding>
    </shape>
</item>
<item android:state_pressed="false">
    <shape android:shape="rectangle">
        <stroke android:color="#ff395d" android:width="1dp"></stroke>
        <solid android:color="#ffffff"></solid>
        <corners android:radius="60dp"></corners>
        <padding
            android:top="15dp"
            android:right="15dp"
            android:left="15dp"
            android:bottom="15dp"
            ></padding>
    </shape>
  </item>
</selector>

我想让我的代码像图片一样工作,但我不知道如何改变TextColor

一个解决方案是扩展父布局来处理按下状态并给出一个回调。例如,如果你在布局中有一个ImageView,并且想要根据按下状态改变色调,这可能会很有用。

接口:

public interface PressedListener {
    void onDown();
    void onUp();
}

布局类:

public class MyRelativeLayout extends RelativeLayout {
    private PressedListener mPressedListener;
    private Rect mViewRect;
    public MyRelativeLayout(Context context) {
        this(context, null);
    }
    public MyRelativeLayout(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }
    public MyRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    public void setPressedListener(PressedListener listener) {
        mPressedListener = listener;
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (mPressedListener != null) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    mPressedListener.onDown();
                    mViewRect = new Rect();
                    getHitRect(mViewRect);
                    break;
                case MotionEvent.ACTION_UP:
                case MotionEvent.ACTION_CANCEL:
                case MotionEvent.ACTION_OUTSIDE:
                    mPressedListener.onUp();
                    mViewRect = null;
                    break;
                case MotionEvent.ACTION_MOVE:
                    if (mViewRect != null &&
                            !mViewRect.contains(Math.round(getX() + event.getX()),
                                    Math.round(getY() + event.getY()))) {
                        mPressedListener.onUp();
                        mViewRect = null;
                    }
                    break;
            }
        }
        return super.onTouchEvent(event);
    }
}

您可以使用下面的可绘制文件更改文本颜色。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:color="@android:color/white" />
    <item android:state_focused="true" android:color="@android:color/white" />
    <item android:state_pressed="true" android:color="@android:color/white" />
    <item android:color="@color/colorPrimary" />
</selector>

请像这样设置可绘制

            <TextView
                android:id="@+id/txtView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Hello"
                android:textColor="@drawable/selector_text" />

和你必须使用textViewsetSelected属性来改变你的textview的颜色在你的java代码。

最新更新