您的位置:首页 > 其它

一些不怎么注意的细节

2012-08-01 11:40 246 查看
0 . http://ant.apache.org/ Tomcat在server.xml文件里给指定监听的端口指定编码方式能解决中文文件无法下载问题,比如在8080端口加上URIEncoding="UTF-8",需重启服务。

1.让按钮不能按

buttonl.setClickable(false); true是能按

但是当让按钮不能按设置后,接着设置按钮的监听,按钮自动变为能按,所以应该先监听后设置。

2. 让按钮不可见

button.setVisibility(View.INVISIBLE); 参数View.INVISIBLE是可见。

设置不可见后按钮还是占地方的,让按钮不占地方,参数设置为View.GONE。

3. 当在ListView中给CheckBox setChecked()时,无论是true还是false都会导致当你所点击的CheckBox在滑出屏幕时会再setChecked()一次

比如:你初始时在getview代码中给一个CheckBox set false了,在屏幕上点击让其set true让后CheckBox 滑出屏幕,在划回来,你会发现CheckBox 变成false了。

用ListView测试加如下判断后发现,点击一个Checkbox后每隔点击的Checkbox10个Item的Checkbox也变成了了checked。

if(convertView==null)

{

convertView=inflate.inflate(R.layout.violation_staff_item, null);

holder.box=(CheckBox)convertView.findViewById(R.id.violation_staff_item_checkbox);

holder.text=(TextView)convertView.findViewById(R.id.violation_staff_item_child);

convertView.setTag(holder);

}

else

{

holder=(ViewHolder) convertView.getTag();

}

4. 执行数据库操作时,对于字符串要用“' ”包起来,因为字符串中可以有空格和各种符号,并且“' ”与字符串间不能有空格,因为有空格和没空格是两种字符串了。

5. 用Intent传递数据时,不能直接传递类的对象,把要传递的对象实现java.io.Serializable接口就能正确传递了。获取时(传递的类)intent.getSerializableExtra("key")。

6. HashMap对象存的键值对,一般是通过键来获取值,如果不知道键或者想获取键则可这样做:调用HashMap的方法entrySet方法获取Set<Map.Entry<K,V>>
对象再迭代Set对象得到Map.Entry<K,V>对象,接着可以通过
getKey()
方法得到HanshMap的key了。(Map.Entry<String, String> entry : map.entrySet())

7. 应用程序内置资源放到assets文件夹下,可在里面新建目录,注意资源和目录不能有中文,获取资源的方法如下:用getResources().getAssets()方法或者getAssets()方法得到AssetManager对象,接下来就很容易得到想要的了,比如得到所有文件的名字assetManager.list(""),得到assets文件夹下所有文件名,如果assets文件夹里有文件夹叫xml,里面有文件,得到文件名的方法为assetManager.list("xml"),路径都是相对assets路径的,得到流也很容易,看开发文档,参数为相对assets路径的名字。如果在assets文件夹下的文件夹为空文件夹,获取assets下文件名时会忽略空文件夹。在assets文件夹下影藏了3个带文件的文件夹,分别是images、sounds、webkit。images里面有两张png格式图片,图片如图:




8. 对byte类型移位前最好先&0xff一下,如果不&0xff对于英文不会有影响,而对于中文字符有时不小心会出现乱码,观看jdk源码发现对byte移位前都先&0xff了。

public static String byteToString(byte[]b,int off,int len)//小端模式来的字节转成大端模式的字符串
	   {
		   int j=0;
		   int leng=(len-off)/2;
		   StringBuffer sb=new StringBuffer();
		   for(int i=0;i<leng;i++)
		   {
			   j=i*2;
			   sb.append((char)((b[j+1]<<8)|b[j]&0xff));//此处如果不&0xff部分中文字符会出现乱码
		   }
		return sb.toString();
	   }


9.继承自BroadCastReceiver的类构造时只能使用默认构造方法,否则报异常。传值没意义的。

10.linux文件权限10位,1指文件类型,2-4指文件所有者权限,5-7指用户所在组用户权限,8-10指其他用户权限,安卓里的程序对其他程序而言相当于其他程序。若要删除其他程序下的文件需要文件的父文件夹的可写与可执行权限。若要在其他程序的文件里写、读,需要父文件夹的可执行权限,同时需要文件对应的读写权限。 RWX:读写可执行。

11.在ScrollView中嵌套ListView,ListView的滑动效果会被ScrollView覆盖掉,重写ScrollView的onInterceptTouchEvent方法就行了:

@Override
	public boolean onInterceptTouchEvent(MotionEvent ev) {
		return false;
	}


12.在适配器里的getView方法中指定子Item的View通过getLayoutInflater().inflate(android.R.layout.simple_list_item_single_choice, parent,false)与getLayoutInflater().inflate(android.R.layout.simple_list_item_single_choice, null);效果是不同的(参数是个例子),三参数的能得到容器ViewGrop的边距等参数的设置,两参数的大小完全由本身决定。

13.Vibrator类用于控制、查询机器震动,需要权限android.permission.VIBRATE。

Vibrator vibrator = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE);
		vibrator.vibrate(200);


14.给ListView加点击监听,再执行performItemClick方法,发现ListView的Item被choose了,但是点击事件没被触发。如果是继承自ListActivity,getListView得到ListView,执行这个方法会触发点击事件。

15.用javac编译好文件后用java命令执行报

Exception in thread "main" java.lang.NoClassDefFoundError: com/liu/Test
这样的错误有两种可能,一是:文件在当前目录而不是在当前目录下的com/liu目录,创建com/liu目录,把文件复制过去再运行,这种情况只会在有包名的情况下出现。二是:classpath配置有问题如果classpath中没有 .;这种配置就会报这个问题。
16.View的onTouchEvent方法中,如果返回true,则其父View不会接受触屏事件了,如果返回false,则子View只能接收down事件,其余事件被消费了。触发事件从子View开始一级级传递。ViewGroup中的onInterceptTouchEvent方法可以阻止事件向底层传递,getParent().requestDisallowInterceptTouchEvent(true)可以阻止父View截获事件。

17.继承View的控件在设置监点击听后点击才会有声音,如果设置

android:soundEffectsEnabled="false"

点击后不再有声音,方法View.playSoundEffect(int) 为播放点击声音的方法,如果android:soundEffectsEnabled=false,此方法不起作用。

18. ?attr/actionBarStyle属性代表引用actionBarStyle这个属性所引用的style。

19.Canvas画图默认从左往右画,对于一个从图片得到的Drawable,设置的的宽高大于图片时,图片居中显示。

20.如果工程是个lib库,并且使用了自定义属性,那么xmlns应该这样http://schemas.android.com/apk/res-auto/,否则就是http://schemas.android.com/apk/res/包名,这是网上的观点。2015.5.26日,完成自定义竖向seekbar控件时,发现eclipse生成的layout文件中含有xmlns:app="http://schemas.android.com/apk/res-auto",把res-auto改成包名,读取不到自定义属性值,改回res-auto,读取到了。根据以往使用自定义属性的情况,怀疑这个地方与adt或者sdk版本有关。

21.4.2系统之后再锁屏界面能够显示小部件,原理就是在原来的桌面控件的xml文件的标签appwidget-provider中增加android:widgetCategory="home_screen|keyguard"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: