【问题标题】:highlight the selected textview in different colour以不同颜色突出显示选定的文本视图
【发布时间】:2015-02-06 06:17:53
【问题描述】:

我有 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"
         />

【问题讨论】:

    标签: android colors textview


    【解决方案1】:

    有一个简单的解决方案:

    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'。

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

    【讨论】:

      【解决方案2】:

      您可以以编程方式进行。 例如,将此代码放在 clickTextView.setOnClickListener() 中。

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

      文本视图将变为红色。

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

      【讨论】:

        【解决方案3】:

        试试下面的代码:

        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);
              }
        

        【讨论】:

        • 我将这 3 个文本视图用作 3 个选项卡,我想将所选选项卡突出显示为红色,其他 2 个应保持默认颜色。当我使用它时,一旦我选择了标签,它就会永远变成红色。如何根据我的选项卡选择更改突出显示选项卡的颜色
        • 我在 onCreateView 之外使用了 private void changeViewBackground(boolean view1,boolean view2,boolean view3) { 。然后它崩溃了 il update m question 并带有我收到的错误消息
        • 有一个简单的解决方案:
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-13
        • 2022-07-21
        • 2020-11-20
        • 1970-01-01
        • 2021-05-22
        • 1970-01-01
        • 2019-07-06
        相关资源
        最近更新 更多