cap*_*ono 7 android textview android-background
我正在尝试在单击时更改textview的背景.
例如,如果单击文本视图,则背景将变为黄色并保持黄色,直到再次单击为止.然后它返回到默认背景.
当前textview按下时的背景更改,但在发布时返回默认值.
我在互联网上搜索解决方案,并查看堆栈溢出的大部分解决方案,仍然没有解决方案.
可绘制/ 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>
Run Code Online (Sandbox Code Playgroud)
可绘制/ 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>
Run Code Online (Sandbox Code Playgroud)
可绘制/ 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>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
文字样式:
<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>
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我我做错了什么
谢谢.
MY解决方案:
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>
Run Code Online (Sandbox Code Playgroud)
活动
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());
}
Run Code Online (Sandbox Code Playgroud)
如果单击文本视图,背景将变为黄色并保持黄色,直到再次单击.然后它返回到默认背景.
这是一个逻辑问题,因为你需要在你的点击监听器中保持当前的点击状态.(盲编码):
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;
}
});
Run Code Online (Sandbox Code Playgroud)
要改进答案,您应该stateChanged在活动中保持标记并在活动重新创建中保留其值 - 如果用户轮换活动.(将标志存储在其中onSaveInstanceState并在onCreate其参数不为空时恢复.)
除上述答案外,请尝试此代码段.
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape>
<gradient android:endColor="#AD1F2D" android:startColor="#AD1F2D" />
</shape>
</item>
<item android:state_focused="true">
<shape>
<gradient android:endColor="#ff4b46" android:startColor="#ff4b46" />
</shape>
</item>
<item>
<shape>
<gradient android:endColor="#ff4b46" android:startColor="#ff4b46" />
</shape>
</item>
</selector>
Run Code Online (Sandbox Code Playgroud)
我希望这对每个人都有用.
| 归档时间: |
|
| 查看次数: |
26287 次 |
| 最近记录: |