1. 获取手机当前的横竖屏模式
activity.getWindowManager().getDefaultDisplay().getOrientation(); //0是竖屏 1是横屏
</pre><pre name="code" class="java">2. 获取手机像素尺寸以及像素密度(每英寸有多少个像素点)
<pre name="code" class="java">DisplayMetrics dm = new DisplayMetrics();
context.getWindowManager().getDefaultDisplay().getMetrics(dm);
pxy[0] = dm.widthPixels;
pxy[1] = dm.heightPixels;
</pre><pre name="code" class="java">以及像素和像素密度之间的转换:
<pre name="code" class="java">/**
* 将dp转换为px像素
* @param context
* @param dp
* @return
*/
public static int dp2pix(Activity context, float dp){
float density = context.getResources().getDisplayMetrics().density;
ILog.print("UIUtil", "dp2px density " + density);
return (int)(density * dp + 0.5f);
}
/**
* 将px转换为dp
* @param context
* @param pix
* @return
*/
public static int pix2dp(Activity context, float pix){
float density = context.getResources().getDisplayMetrics().density;
ILog.print("UIUtil", "dp2px density " + density);
return (int)(pix / density + 0.5f);
}
</pre><pre name="code" class="java">
3. android 屏幕横竖屏切换时,一般都会对Activity进行销毁和重建,有时我们不希望对Activity的销毁,可以在清单文件中对应的activity声明:
android:configChanges="keyboardHidden|orientation"
以上方面只对sdk13之前的管用,sdk13后的则需要使用下面这条命令
android:configChanges="screenSize|orientation"
为了适应多个sdk版本,可以把上面的几个都综合在一起,就可以解决多个版本来适应。
4. android清单文件manifest中的support-screens选项卡作用
<supports-screensandroid:resizeable=["true"|"false"]
android:smallScreens=["true" | "false"]
android:normalScreens=["true" | "false"]
android:largeScreens=["true" | "false"]
android:xlargeScreens=["true" | "false"]
android:anyDensity=["true" | "false"]
android:requiresSmallestWidthDp="integer"
android:compatibleWidthLimitDp="integer"
android:largestWidthLimitDp="integer"/>
作用:
使用这个属性,启动系统的屏幕兼容程序,对app的UI在大屏幕或小屏幕上进行屏幕兼容处理。
原理:通常对不同尺寸的屏幕我们要做不同像素的资源来进行UI布局处理,有时候这样处理也不能达到很好的效果。此时,我们就可以用此选项来控制,在大屏幕上,是否使用系统的兼容模式来放大UI来填充屏幕,或者在小屏幕上进行缩放填充屏幕;
具体详情请看:http://www.cnblogs.com/andriod-html5/archive/2012/05/21/2539418.html
6. android metadata:
通常写在Androidmanifest.xml文件中,以名值对的形式出现在metadata中,通常用于保存一些组件的配置信息,meta中如果全是数字的话默认为int型,其他则为字符型;最终名值对被包装乘bundle类型,使用bundle去获取;
具体的获取方法:
context.getPackageManager.getApllicationInfo(getPackageName(), PackageManager.GET_META_DATA).metaData.getString("")
如果是Activity里面的名值对的话,则使用
getPackageManager().getActivityInfo( new ComponentName(this, MetadataActivity.class), PackageManager.GET_META_DATA);