一些android开发经常用到的小知识,不管知不道总是有用的
1.获取屏幕的物理长宽
DisplayMetrics metric = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metric); int width = metric.widthPixels; // 屏幕宽度(像素) int height = metric.heightPixels; // 屏幕高度(像素) float density = metric.density; // 屏幕密度(0.75 / 1.0 / 1.5) int densityDpi = metric.densityDpi; // 屏幕密度DPI(120/160/240)
2.存储相关
// 判断SD卡是否存在 Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED) path = Environment.getExternalStorageDirectory();//获取SD卡目录 StatFs statfs = new StatFs(path.getPath()); long blocSize = statfs.getBlockSize(); //获取block的SIZE long totalBlocks = statfs.getBlockCount(); //获取BLOCK数量 long availaBlock = statfs.getAvailableBlocks(); //空闲的Block的数量
3.android输入时软键盘的设置
<activity android:windowSoftInputMode=""/>
"stateUnspecified" 软键盘的状态(是否它是隐藏或可见)没有被指定。系统将选择一个合适的状态或依赖于主题的设置。这个是为了软件盘行为默认的设置。 "stateUnchanged" 软键盘被保持无论它上次是什么状态,是否可见或隐藏,当主窗口出现在前面时。 "stateHidden" 当用户选择该Activity时,软键盘被隐藏——也就是,当用户确定导航到该Activity时,而不是返回到它由于离开另一个Activity。 "stateAlwaysHidden" 软键盘总是被隐藏的,当该Activity主窗口获取焦点时。 "stateVisible" 软键盘是可见的,当那个是正常合适的时(当用户导航到Activity主窗口时)。 "stateAlwaysVisible" 当用户选择这个Activity时,软键盘是可见的——也就是,也就是,当用户确定导航到该Activity时,而不是返回到它由于离开另一个Activity。 "adjustUnspecified" 它不被指定是否该Activity主窗口调整大小以便留出软键盘的空间,或是否窗口上的内容得到屏幕上当前的焦点是可见的。系统将自动选择这些模式中一种主要依赖于是否窗口的内容有任何布局视图能够滚动他们的内容。如果有这样的一个视图,这个窗口将调整大小,这样的假设可以使滚动窗口的内容在一个较小的区域中可见的。这个是主窗口默认的行为设置。 "adjustResize" 该Activity主窗口总是被调整屏幕的大小以便留出软键盘的空间。 "adjustPan" 该Activity主窗口并不调整屏幕的大小以便留出软键盘的空间。相反,当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分。这个通常是不期望比调整大小,因为用户可能关闭软键盘以便获得与被覆盖内容的交互操作。
4.字符串输入限制
android:digits的参数是一个字符串,输入的字符是否在给定的字符串中,下例是一个输入内容的限制,限制输入只能是下划线数字和大小小写字母
android:digits="@string/register_name_digits"
<string name="register_name_digits">._0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLIMNOPQRSTUVWXYZ</string>
5.TextView指定某段内容添加下划线和颜色
TextView textView = (TextView)findViewById(R.id.testView);
textView.setText("输入内容"+Html.fromHtml("<u>"+"下划线"+"</u>"+"输入内容"));
6.在其他线程中显示Toast
// 线程中显示Toast Looper.prepare(); Toast.makeText(context, "content", Toast.SHORT).show(); Looper.loop();
7.常用的记不住的style
//RatingBar风格 style="?android:attr/ratingBarStyle" //默认风格 style="?android:attr/ratingBarStyleSmall" //小风格 style="?android:attr/ratingBarStyleIndicator" //不可交互 //ProgressBar风格 style="?android:attr/progressBarStyleLarge" //大的圆形进度条, 不可以准确显示进度 style="?android:attr/progressBarStyleHorizontal" //水平进度条,可以准确显示进度 style="?android:attr/progressBarStyleSmall" //小的圆形进度条,不可以准确显示进度
8.onTouchEvent中获取触摸位置
// 获取触摸相对VIEW位置X或Y的 event.getX(); // 获取触摸相对屏幕的绝对位置X或Y event.getRawX();
9.TabActivity中启动服务
TabActivity中startActivity是正常的,但是通过bindService去启动服务就会无法启动,如果使用TabActivity来进行开发,并且程序需要针对TabActivity中TabHost中的每一个Activity单独绑定一个Service,通常做法是在对应Tab页的Activity的onCreate()方法中进行bind service 操作,但是通过实践表明这个方法是无法达到绑定效果,Google Android Issue中有这个缺陷,缺陷详细信息在这里(Google Android Issue 2483),解决方式是如下
this.getApplicationContext().bindService(Intent, ServiceConnection, BIND_AUTO_CREATE);
同理unbindService也是如此
this.getApplicationContext().unbindService(ServiceConnection);
....先写到这里了,接下来继续补充
浙公网安备 33010602011771号