在此记录android中遇到的一些问题。
1、Android GridView组件如何去除四周的空隙
在GridView组件中设置android:listSelector=”@null”
2,EditText通过输入发进行“确定” 处理。
android:imeOptions=”actionDone” ,软键盘下方变成“完成”
android:imeOptions=”actionSend” 软键盘下方变成“发送”
在onEditAction方法中actionId就对应我们设置的imeOptions。系统默认的actionId有:EditorInfo.IME_NULL、EditorInfo.IME_ACTION_SEND、EditorInfo.IME_ACTION_DONE等。这样我们就可以根据不同的EditText来实现不同的软键盘右下角功能键。
1.etNumber = (EditText)findViewById(R.id.number_content);
2. etDefault.setOnEditorActionListener(this);
.@Override
2. public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
3. switch(actionId){
4. case EditorInfo.IME_NULL:
5. System.out.println("null for default_content: " + v.getText() );
6. break;
7. case EditorInfo.IME_ACTION_SEND:
8. System.out.println("action send for email_content: " + v.getText());
9. break;
10. case EditorInfo.IME_ACTION_DONE:
11. System.out.println("action done for number_content: " + v.getText());
12. break;
13. }
14. //Toast.makeText(this, v.getText()+"--" + actionId, Toast.LENGTH_LONG).show();
15. return true;
16. }
3,Listview焦点冲突问题
该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。
属性的值有三种:
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
通常我们用到的是第三种,即在Item布局的根布局加上android:descendantFocusability=”blocksDescendants”的属性就好了
4,getView() 有两种布局,
http://www.2cto.com/kf/201501/371528.html
5,TextView 设置多监听 (用于 回复 @XXX : )
private void initTextView(){
SpannableString ss = new SpannableString("text4: Click here to dial the phone.");
ss.setSpan(new StyleSpan(Typeface.BOLD), 0, 6,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
TextView t4 = (TextView) findViewById(R.id.tvt_span);
t4.setMovementMethod(LinkMovementMethod.getInstance());
t4.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
System.out.println("OnTouchListener");
return false;
});
}
6,ListView 特殊的几个属性
android:stackFromBottom=”true” 你做好的列表就会显示你列表的最下面
android:transcriptMode=”alwaysScroll” 可以将Android平台的控件(支持ScrollBar)自动滑动到最底部.
cacheColorHint属性,很多人希望能够改变一下它的背景,使他能够符合整体的UI设计,改变背景背很简单只需要准备一张图片然后指定属性 android:background=”@drawable/bg”,不过不要高兴地太早,当你这么做以后,发现背景是变了,但是当你拖动,或者点击list空白位置的时候发现ListItem都变成黑色的了,破坏了整体效果。
如果你只是换背景的颜色的话,可以直接指定android:cacheColorHint为你所要的颜色,如果你是用图片做背景的话,那也只要将android:cacheColorHint指定为透明(#00000000)就可以了
android:divider=”@drawable/list_driver” 其中 @drawable/list_driver 是一个图片资源
android:divider=”@drawable/@null” 不想显示分割线
android:fadingEdge=”none” 上边和下边有黑色的阴影,设置后没有阴影了~
android:scrollbars=”none” 隐藏滚动条 与setVerticalScrollBarEnabled(true);的效果是一样的,
android:fadeScrollbars=”true” 配置ListView布局的时候,设置这个属性为true就可以实现滚动条的自动隐藏和显示。
7.GridView点击事件无效的时候
可能是内部的Item占据了点击焦点, 注意Button,将Button换成TextView
8.EditText动态用java代码设置只能输入数字。
edt.setKeyListener(new DigitsKeyListener(false, true));
9.PopupWindow使用报错
android.view.WindowManager$BadTokenException: Unable to add window –
token null is not valid; is your activity running?
最后终于发现是PopupWindow组件的使用问题,如果你直接在Activity创建的方法中初始化,则会有此错误
因此总结:PopupWindow必须在某个事件中显示或者是开启一个新线程去调用,不能直在oncreate方法中显示一个PopupWindow,否则永远会有以上错误
我是把他放在点击事件中,就好了。
10. java.lang.UnsupportedOperationException: Can’t convert to dimension: type=0x12
这个问题定位很明显是 布局的原因。
但是纠结了半天都没有发现到底是什么原因。
在网上搜的时候发现,这个问题的原因是多种多样的。
我遇到的问题是:
在 LinearLayout 已经定义了 android:orientation=”horizontal” 之后,
仍然在子布局里使用了 android:layout_marginLeft=”@+id/item_order_allprice”。
因为LinearLayout 横向布局本身就是按顺序的,不需要相对,去掉这行就没有问题了