更改TextView的背景色上点击机器人机器人、背景色、TextView

2023-09-06 03:12:41 作者:心系于你

我试图点击时改变一个TextView的背景。

例如,如果TextView是被点击的背景变为黄色并保持黄色,直到它再次点击。然后它返回到它的默认背景。

目前的TextView pssed倒在$ P $背景的变化,但返回到默认的发布。

我在互联网上搜索解决方案,并期待在大多数的计算器上所有的解决方案,仍然无解。

绘制对象/ selector.xml:

 <选择的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android>
     <项目机器人:可绘制=@可绘制/ circle_on机器人:state_enabled =真正的机器人:STATE_ pressed =真/>
     <项目机器人:可绘制=@可绘制/ circle_on机器人:state_enabled =真正的机器人:state_focused =真/>
     <项目机器人:可绘制=@可绘制/ circle_off/>
< /选择器>
 

绘制对象/ circle_on:

 <形状的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
   机器人:形状=椭圆形>
   <中风
     机器人:宽=2DP
     机器人:颜色=@彩色/灰度>
   < /行程>
   [固体机器人:颜色=@色/浅蓝色/>
< /形状>
 
如何用美图秀秀更改照片背景颜色

绘制对象/ circle_off:

 <形状的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
   机器人:形状=椭圆形>
    <中风
        机器人:宽=2DP
        机器人:颜色=@彩色/灰度>
    < /行程>
    [固体机器人:颜色=@色/ WhiteSmoke可以/>
< /形状>
 

TextView的:

 <的TextView
                风格=@风格/ RoundText
                机器人:layout_width =50dp
                机器人:layout_height =50dp
                机器人:背景=@可绘制/ repeat_selector
                机器人:可点击=真
                机器人:文本=太阳报>
            < / TextView的>
 

文本样式:

 <样式名称=RoundText>
    <项目名称=机器人:文字颜色>#555555< /项目>
    <项目名称=安卓重力> center_vertical | center_horizo​​ntal< /项目>
    <项目名称=机器人:TEXTSIZE> 15sp< /项目>
    <项目名称=机器人:TEXTSTYLE>大胆< /项目>
    <项目名称=机器人:fontFamily中>无衬线薄< /项目>
< /风格>
 

有人能告诉我什么,我做错了

感谢。

我的解决方法:

 公共类PlanTextView扩展TextView的{

私人布尔_stateChanged;
私人布尔_selected;

公共布尔is_stateChanged(){
    返回_stateChanged;
}

公共无效set_stateChanged(布尔_stateChanged){
    this._stateChanged = _stateChanged;
}

公共布尔is_selected(){
    返回_selected;
}

公共无效set_selected(布尔_selected){
    this._selected = _selected;
}

公共PlanTextView(上下文的背景下){
    超(上下文);
}

公共PlanTextView(上下文的背景下,ATTRS的AttributeSet){
    超(背景下,ATTRS);
}

公共PlanTextView(上下文的背景下,ATTRS的AttributeSet,诠释defStyle){
    超(背景下,ATTRS,defStyle);
}
 }


< com.plan.views.PlanTextView
                机器人:ID =@ + ID /月
                风格=@风格/ RoundText
                机器人:layout_width =50dp
                机器人:layout_height =50dp
                机器人:背景=@可绘制/ circle_off
                机器人:可点击=真
                机器人:的onClick =PlanOnClick
                机器人:文本=星期一>
 < /com.plan.views.PlanTextView>
 

活动

 公共无效PlanOnClick(视图v){
    PlanTextView视图=(PlanTextView)V;
    如果(view.is_stateChanged()){
        view.setBackgroundResource(R.drawable.circle_off);
        view.set_selected(假);
    } 其他 {
        view.setBackgroundResource(R.drawable.circle_on);
        view.set_selected(真正的);
    }
    view.set_stateChanged(view.is_stateChanged()!);
}
 

解决方案

如果TextView的点击背景变为黄色并保持黄色,直到它再次点击。然后它返回到它的默认背景。

这是逻辑的问题,因为你需要保持你的点击监听器当前点击状态(盲编码):

  textView.setOnClickClickListener(新View.OnClickListener(){
    私人布尔stateChanged;
    公共无效的onClick(视图查看){
        如果(stateChanged){
            //重新设置背景默认;
            textView.setBackgroundDrawable(circleOffDrawable);
        } 其他 {
            textView.setBackgroundDrawable(circleOnDrawable);
        }
        !stateChanged = stateChanged;
    }
});
 

要改善的答案,你应该保持 stateChanged 标记中的活动,并保留其在活动娱乐活动的价值 - 如果用户旋转活动。 (存储标志的onSaveInstanceState 的onCreate 还原如果参数不为null)

I'm trying to change the background of a textview when clicked.

For instance, if the textview is click it the background changes to yellow and remains yellow until it is click again. Then it returns to its default background.

Currently textview the background changes on pressed down, but returns to default on release.

I have search the internet for solutions and look at most of all the solution on stackoverflow, still no solution.

Drawable/selector.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:drawable="@drawable/circle_on" android:state_enabled="true" android:state_pressed="true"/>
     <item android:drawable="@drawable/circle_on" android:state_enabled="true" android:state_focused="true"/>
     <item android:drawable="@drawable/circle_off"/>
</selector>

Drawable/circle_on:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
   android:shape="oval" >
   <stroke
     android:width="2dp"
     android:color="@color/Gray" >
   </stroke>
   <solid android:color="@color/LightBlue" />
</shape>

Drawable/circle_off:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
   android:shape="oval" >
    <stroke
        android:width="2dp"
        android:color="@color/Gray" >
    </stroke>
    <solid android:color="@color/WhiteSmoke" />
</shape>

TextView:

  <TextView
                style="@style/RoundText"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:background="@drawable/repeat_selector"
                android:clickable="true"
                android:text="Sun" >
            </TextView>

Text Style:

  <style name="RoundText">
    <item name="android:textColor">#555555</item>
    <item name="android:gravity">center_vertical|center_horizontal</item>
    <item name="android:textSize">15sp</item>
    <item name="android:textStyle">bold</item>
    <item name="android:fontFamily">sans-serif-thin</item>
</style>

Can someone please tell me what I'm doing wrong

Thanks.

MY Solution:

    public class PlanTextView extends TextView  {

private boolean _stateChanged;
private boolean _selected;

public boolean is_stateChanged() {
    return _stateChanged;
}

public void set_stateChanged(boolean _stateChanged) {
    this._stateChanged = _stateChanged;
}

public boolean is_selected() {
    return _selected;
}

public void set_selected(boolean _selected) {
    this._selected = _selected;
}

public PlanTextView(Context context) {
    super(context);
}

public PlanTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public PlanTextView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}
 }


<com.plan.views.PlanTextView
                android:id="@+id/mon"
                style="@style/RoundText"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:background="@drawable/circle_off"
                android:clickable="true"
                android:onClick="PlanOnClick"
                android:text="mon" >
 </com.plan.views.PlanTextView>

Activity

public void PlanOnClick(View v) {
    PlanTextView view = (PlanTextView)v;
    if (view.is_stateChanged()) {
        view.setBackgroundResource(R.drawable.circle_off);
        view.set_selected(false);
    } else {
        view.setBackgroundResource(R.drawable.circle_on);
        view.set_selected(true);
    }
    view.set_stateChanged(!view.is_stateChanged());
}

解决方案

if the textview is clicked the background changes to yellow and remains yellow until it is click again. Then it returns to its default background.

It's a matter of logic as you need to keep in your click listener the current click state.(blind coding):

textView.setOnClickClickListener(new View.OnClickListener() {
    private boolean stateChanged;
    public void onClick(View view) {
        if(stateChanged) {
            // reset background to default;
            textView.setBackgroundDrawable(circleOffDrawable);
        } else {
            textView.setBackgroundDrawable(circleOnDrawable);
        }
        stateChanged = !stateChanged;
    }
});

To improve the answer, you should keep stateChanged flag in the activity and retain its value across activity recreations - if the user rotates the activity. (store the flag in onSaveInstanceState and restore in onCreate if its parameter is not null)