在RadioGroup如果想把某个指定的RadioButton要将所选项取消,使用RadioButton.setCheck(false),会造成再选的时候出现选不中的问题。
解决方案:
在RadioGroup中需要选中其中一个RadioButton时,需要采用radioGroup.check(radioButton.getId()); 方式来选中单选按钮(而不是使用radioButton.setCheck(true); 的方式)
想取消它的选项,直接使用clearCheck();
在使用RadioButton.setOnClickListener的监听时,在里面如果你想确定它的是否已经选中千万不要使用RadioButton.isChecked()方法,因为你点击RadioButton的时候,它就直接返回true,代表着你的判断永远都是true!!!
解决方案:
使用标识符判断时候已经被选中的,再进行逻辑判断
当你在其他的方法在代码中去使用代码mRemarkRadioButton.callOnClick();动态点击它时,它是不会自己被选中的。。RadioButton.setOnClickListener中mRemarkRadioButton.isCheck()返回false!
解决方案:
在对应的mRemarkRadioButton.setOnClickListener()中增加被选中的代码radioButton.setCheck(true);这样,就可以了
关于排版的问题(中文跟英语或者数字导致排版混乱)
解决方案:
https://blog.csdn.net/zhuqiang1002/article/details/18967027(完美的解决方案,下面的是自己用过的还可以)
//将textview中的字符全角化。即将所有的数字、
//字母及标点全部转为全角字符,使它们与汉字同占两个字节,
//这样就可以避免由于占位导致的排版混乱问题了。
//半角转为全角的代码如下,只需调用即可。
public static String ToDBC(String input) {
char[] c = input.toCharArray();
for (int i = 0; i< c.length; i++) {
if (c[i] == 12288) {
c[i] = (char) 32;
continue;
}if (c[i]> 65280&& c[i]< 65375)
c[i] = (char) (c[i] - 65248);
}
return new String(c);
}
关于设置 setTag()属性失效问题:
mWaitOrderDeleted = (TextView) findViewById(R.id.text_wait_order_receiving);
mWaitOrderReceiving = (TextView) findViewById(R.id.text_wait_maintenance);
/**
* 更新接受广播回来的各种维修单的总数修改
* @param status
*/
private void updateOperationTypeSumReduce(int status) {
int sum;
int oversum;
switch (status) {
case 0:
sum = (int) mWaitOrderDeleted.getTag();
oversum = sum - 1;
mWaitOrderDeleted.setTag(oversum);
mWaitOrderDeleted.setText("已销单:(" + oversum + ")");
break;
case 1:
sum = (int) mWaitOrderReceiving.getTag();
oversum = sum - 1;
mWaitOrderReceiving.setTag(oversum);
mWaitOrderReceiving.setText("待接单:(" + oversum + ")");
break;
}
}
/**上面的代码记得有个bug 当第一次调了该方法数值看起来减一了,但是,第二次第三次开始
就没有了变化。
处理方法是**/
mWaitOrderDeleted = (TextView) mLl1.findViewById(R.id.text_wait_order_receiving);
mWaitOrderReceiving = (TextView)mLl2.findViewById(R.id.text_wait_maintenance);
这个是因为setTag()是这个控件的父控件给的,也就是说,你要使用
mLl2.findViewById(R.id.text_wait_maintenance);
而不是直接findViewById(R.id.text_wait_maintenance);
想修改成自己想要的ProgressBar 其实它就是修改前面跟后面的背景图来达到你想要的效果
<ProgressBar
android:layout_marginTop="4dp"
android:id="@+id/bar_progress"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="8"
android:progressDrawable="@drawable/progressbar_green"
android:max="100"
android:progress="60"/>
// drawable ---progressbar_green
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!--
对layer-list样式,是按照顺序堆叠的,所以最上层的放在最后面,而且如果设置了progressDrawable
的属性,再去设置progressbar的background是没有效果的
-->
<item android:id="@android:id/background">
<shape>
<corners android:radius="10dp" /> <!-- 圆角 -->
<solid android:color="@color/activity_bg"
/> <!-- 描边 -->
<stroke android:color="@color/white"
android:width="1dp"/>
</shape>
</item>
<item android:id="@android:id/progress">
<!--注意这里的Tap是clip 再 shape的-->
<clip>
<shape>
<corners android:radius="10dp" />
<stroke
android:width="1dp"
android:color="@color/white" />
<gradient
android:angle="0"
android:endColor="@color/green"
android:startColor="@color/green" />
</shape>
</clip>
</item>
</layer-list>