记录Android开发中遇到的一些问题

在此记录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 特殊的几个属性

  1. android:stackFromBottom=”true” 你做好的列表就会显示你列表的最下面

  2. android:transcriptMode=”alwaysScroll” 可以将Android平台的控件(支持ScrollBar)自动滑动到最底部.

  3. cacheColorHint属性,很多人希望能够改变一下它的背景,使他能够符合整体的UI设计,改变背景背很简单只需要准备一张图片然后指定属性 android:background=”@drawable/bg”,不过不要高兴地太早,当你这么做以后,发现背景是变了,但是当你拖动,或者点击list空白位置的时候发现ListItem都变成黑色的了,破坏了整体效果。
    如果你只是换背景的颜色的话,可以直接指定android:cacheColorHint为你所要的颜色,如果你是用图片做背景的话,那也只要将android:cacheColorHint指定为透明(#00000000)就可以了

  4. android:divider=”@drawable/list_driver” 其中 @drawable/list_driver 是一个图片资源
    android:divider=”@drawable/@null” 不想显示分割线

  5. android:fadingEdge=”none” 上边和下边有黑色的阴影,设置后没有阴影了~

  6. 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 横向布局本身就是按顺序的,不需要相对,去掉这行就没有问题了

你可能感兴趣的:(MyAndroid)