首页 > 代码库 > Android 经验

Android 经验

1. 如果想添加特殊字符 , 如 @ , 默认报错, 可以在前面加个\  
2 . android:descendantFocusability用法简析 

开发中很常见的一个问题,项目中的listview不仅仅是简单的文字,常常需要自己定义listview,自己的Adapter去继承BaseAdapter,在adapter中按照需求进行编写,问题就出现了,可能会发生点击每一个item的时候没有反应,无法获取的焦点。原因多半是由于在你自己定义的Item中存在诸如ImageButton,Button,CheckBox等子控件(也可以说是Button或者Checkable的子类控件),此时这些子控件会将焦点获取到,所以常常当点击item时变化的是子控件,item本身的点击没有响应该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。属性的值有三种:
      beforeDescendants:viewgroup会优先其子类控件而获取到焦点
      afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
      blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
3, 如果当前activity的启动模式是singleTask...则它上个界面给它传来的bundle都不能接收到
4. 对于自定义的带输入框的Dialog, 点击输入框时不弹出键盘的解决方法

方法一:  在继承AlertDialog, onCreate()方法中, 设置如下:
requestWindowFeature(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
因为AlertDialog默认是:
requestWindowFeature(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
上面这两个flag可以互相牵制
方法二:  继承Dialog,Dialog默认的样式很丑,,需要做2个操作,该操作都是在onCreate方法中进行的
第一: 去掉黑色头部: 
requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉黑色头部
第二: 去掉黑色背景:
getWindow().setBackgroundDrawableResource(android.R.color.transparent);//只有这样才能去掉黑色背景

5.给dialog设置全屏的最简单的方法 ,在构造函数中
super(context,android.R.style.Theme);
setOwnerActivity((Activity)context);
如果该Dialog设置了自定义style,则在其初始化完view后,设置layout宽高
getWindow().setLayout(屏幕宽,屏幕高);
6. 给一个Layout设置selector时。必须设置点击事件才能有效果
7. 字符串的格式化:

    格式为:%[index]$[type] 如:%1$s    %2$d

Android 经验