突出显示不同颜色的选定文本视图
问题描述:
我有3个文本视图,如下所示。一旦我点击其中一个,现在它变成红色,并将其转回到默认颜色。我想将选定的文本视图保持为红色。我有这3个textview在一个片段。突出显示不同颜色的选定文本视图
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"
/>
答
有一个简单的解决方案:
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的背景颜色insdead,则只需更换 'setTextColor' 与' setBackgroundColor”。
除了你的情况,似乎不需要使用选择器,因为它只是针对特定的视图状态更改,与其他视图无关。
答
你可以通过编程做到这一点。例如,将此代码放入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);
}
即时通讯使用这3个textviews作为3个选项卡,我想突出显示选中的选项卡中红色和其他2应保持默认颜色。当我使用这个时,一旦我选择了它将永远变成红色的选项卡。我怎么能chnage突出显示选项卡颜色根据我的选项卡选择 – 2015-02-06 06:39:11
我编辑了代码...检查一次 – user543 2015-02-06 06:51:58
我用private void changeViewBackground(布尔视图1,布尔视图2,布尔 视图3){,在onCreateView。那么它崩溃il更新问题与错误消息我得到 – 2015-02-06 07:04:29