以不同颜色突出显示选定的文本视图

highlight the selected textview in different colour

我有 3 个文本视图,如下所示。一旦我点击其中一个,它就会变成红色并变回默认颜色。我想将选定的文本视图保持为红色。我在片段中有这 3 个文本视图。

mQuickReturnView = (TextView) view.findViewById(R.id.footer);
        mQuickReturnView1 = (TextView) view.findViewById(R.id.footer1);
        mQuickReturnView2 = (TextView) view.findViewById(R.id.footer2);

        TextView clickTextView = (TextView) view.findViewById(R.id.footer);
        TextView clickTextView1 = (TextView) view.findViewById(R.id.footer1);
        TextView clickTextView2 = (TextView) view.findViewById(R.id.footer2);

        clickTextView.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                Toast.makeText(getActivity(), "toppings!",
                        Toast.LENGTH_LONG).show();
            }

        });
        clickTextView1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                Toast.makeText(getActivity(), "Bigg pizza!",
                        Toast.LENGTH_LONG).show();
            }

        });
        clickTextView2.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                Toast.makeText(getActivity(), "Italiano!",
                        Toast.LENGTH_LONG).show();
            }

        });

.xml 文件

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- not selected has transparent color -->
    <item android:state_pressed="false" android:state_selected="false">
        <color android:color="#D8000000"/>
    </item>
    <item android:state_pressed="true" android:state_selected="false" >
        <color android:color="#ff0000"/>
    </item>
    <item android:state_pressed="false" android:state_selected="true">
        <color android:color="#ff0000"/>
    </item>
    <item android:state_pressed="true" android:state_selected="true">
        <color android:color="#ff0000"/>
    </item>
</selector>

布局

 <lk.gamma.pizzakraft.menu.QuickReturnListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/footer1"
        android:layout_width="106.5dip"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:background="@drawable/textview_background"
        android:gravity="center"
        android:paddingBottom="8dip"
        android:paddingLeft="16dip"
        android:paddingRight="16dip"
        android:textColor="@drawable/textview_font"
        android:paddingTop="8dip"
        android:text="@string/footer3"
        android:textAppearance="?android:attr/textAppearanceSmall"
        />
    <!-- android:background="#D8000000" -->

    <TextView
        android:id="@+id/footer2"
        android:layout_width="107dip"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_toRightOf="@+id/footer"
        android:background="@drawable/textview_background"
        android:gravity="center"
        android:paddingBottom="8dip"
        android:paddingLeft="16dip"
        android:paddingRight="16dip"
        android:paddingTop="8dip"
        android:textColor="@drawable/textview_font"
        android:text="@string/footer2"
        android:textAppearance="?android:attr/textAppearanceSmall"
         />

    <TextView
        android:id="@+id/footer"
        android:layout_width="106dip"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:background="@drawable/textview_background"
        android:gravity="center"
        android:paddingBottom="8dip"
        android:paddingLeft="16dip"
        android:paddingRight="16dip"
        android:paddingTop="8dip"
        android:textColor="@drawable/textview_font"
        android:text="@string/footer1"
        android:textAppearance="?android:attr/textAppearanceSmall"
         />

您可以通过编程方式完成。 例如,将此代码放在 clickTextView.setOnClickListener() 中。

clickTextView.setTextColor(Color.parseColor("#FF0000"));

文本视图将变为红色。

为此,您不需要包含颜色规则的 xml 文件。

尝试使用以下代码:

clickTextView.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
              changeViewBackground(true,false,false);
        }

    });
    clickTextView1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            changeViewBackground(false,true,false);
        }

    });
    clickTextView2.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            changeViewBackground(false,false,true);
        }

    });


    private void changeViewBackground(boolean view1,boolean view2,boolean  
        view3) {    
            clickTextView.setSelected(view1);
            clickTextView1.setSelected(view2);
            clickTextView2.setSelected(view3);
      }

有一个简单的解决方案:

private static TextView selectedView = null;

... ...

eachTextView.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            //change last selected view to be normal
            if(selectedView != null)
                 selectedView.setTextColor(Color.parseColor("#D8000000"));

            //set selectedView to be current selected view
            selectedView = (TextView)v;

            //change selected view to be red
            selectedView.setTextColor(Color.parseColor("#FF0000"));



            Toast.makeText(getActivity(), "toppings!",
                    Toast.LENGTH_LONG).show();
        }

    });

如果您想更改 TextView 背景颜色而不是文本颜色,只需将 'setTextColor' 替换为 'setBackgroundColor'。

除了你的情况,似乎没有必要使用选择器,因为它只是针对特定的视图状态更改,与其他视图无关。