Android学习---UI篇

Android学习---UI篇


如何适应多分辨率

首先介绍分辨率的概念

  • 分辨率:整个屏幕的像素数目,为了表示方便一般用屏幕的像素宽度(水平像素数目)乘以像素高度表示,形如1280x720,反之分辨率为1280x720的屏幕,像素宽度不一定为1280
  • 屏幕密度:表示单位面积内的像素个数,通常用dpi为单位,即每英寸多少个像素点
    dp:长度单位,与具体屏幕密度无关,显示的时候根据具体平台屏幕密度的不同最终转换为相应的像素长度,具体转换规则是: 1dp = (目标屏幕密度/标准密度)px,标准密度为160dpi,例如,1dp长度在密度为160dpi的平台表示一个像素的长度,而在240dpi的平台则表示1.5个像素的长度,屏幕密度分为:ldpi,mdpi,hdpi,xhdpi,它们的标准值分别是:120dpi,160dpi,240dpi,320dpi
  • 屏幕尺寸:屏幕的大小,通常用屏幕对角线的长度表示
  • 分辨率切换的时候不要设置wrap content。正确的做法应该是使用的是weight属性。将你控件的layout中的width、height设置为fill-parent,不要使用wrap——content。因为wrap-content的大小是不固定的。而weight(权重)这个属性很好的解决了这个问题。
    当包裹在控件外面的Layout的width、height属性都设置为fill-parent时,可以利用weight的反比特性。即如果控件A设置weight为5,控件B设置weight为7,那么A所占的空间为5/(5+7),B所占的空间为7/(5+7)。这样的反比属性对任何分辨率下的手机都是合适的。

layout:放置对应不同分辨率的布局

创建不同的layout文件夹, layout-800x480,layout-480x320, 系统会根据屏幕的大小自己选择合适的layout进行使用。

横屏竖屏自动切换:

可以在res目录下建立layout-port-800x600和layout-land两个目录,里面分别放置竖屏和横屏两种布局文件,这样在手机屏幕方向变化的时候系统会自动调用相应的布局文件,避免一种布局文件无法满足两种屏幕显示的问题。
  • 还要说明一点:每个activity都有这个属性screenOrientation,每个activity都需要设置,可以设置为竖屏(portrait),也可以设置为无重力感应(nosensor)。

  • 在AndroidManifest.xml里面配置一下就可以了。加入这一行android:screenOrientation="landscape"。
    例如(landscape是横向,portrait是纵向):

    <?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.ray.linkit" 
    android:versionCode="1" 
    android:versionName="1.0"> 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity android:name=".Main" 
    android:label="@string/app_name" 
    android:screenOrientation="portrait"> 
    <intent-filter> 
    <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
    </activity> 
    <activity android:name=".GamePlay" 
    android:screenOrientation="portrait"></activity> 
    <activity android:name=".OptionView" 
    android:screenOrientation="portrait"></activity> 
    </application> 
    <uses-sdk android:minSdkVersion="3" /> 
    </manifest>

另外,android中每次屏幕的切换动会重启Activity,所以应该在Activity销毁前保存当前活动的状态,在Activity再次Create的时候载入配置,那样,进行中的游戏就不会自动重启了!

有的程序适合从竖屏切换到横屏,或者反过来,这个时候怎么办呢?可以在配置Activity的地方进行如下的配置android:screenOrientation="portrait"。这样就可以保证是竖屏总是竖屏了,或者landscape横向。

而有的程序是适合横竖屏切换的。如何处理呢?首先要在配置Activity的时候进行如下的配置:android:configChanges="keyboardHidden|orientation",另外需要重写Activity的 onConfigurationChanged方法。实现方式如下,不需要做太多的内容:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
super.onConfigurationChanged(newConfig); 
if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { 
// land do nothing is ok 
} else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 
// port do nothing is ok 
} 
}

获取屏幕分辨率的做法

DisplayMetrics metrics=new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

获取到本机的分辨率:
复制代码 代码如下:

int widthPixels=metrics.widthPixels;
int heightPixels=metrics.heightPixels;

推荐阅读更多精彩内容

  • 本文参考自: Google的官方权威适配文档 郭霖:Android官方提供的支持不同屏幕大小的全部方法 Storm...
    M悇芐冋忆阅读 10,763评论 5 56
  • 在我们学习如何进行屏幕适配之前,我们需要先了解下为什么Android需要进行屏幕适配。 由于Android系统的开...
    知青的叶阅读 1,218评论 0 2
  • 为什么要屏幕适配? 碎片化 品牌机型碎片化 屏幕尺寸碎片化 操作系统碎片化 为了保证用户获得一致的用户体验效果,使...
    乐乐龙阅读 282评论 0 2
  • 作为一个开发人员,屁股决定脑袋,偶尔需要换位思考,站在UI设计人员的角度考虑下,想想UI设计是怎么来的。 这里可以...
    梧叶已秋声阅读 1,090评论 0 0
  • 一、相关概念 1.分辨率 分辨率就是手机屏幕的像素点数,一般描述成屏幕的“宽×高”,安卓手机屏幕常见的分辨率有48...
    似水年华爱媳妇阅读 616评论 1 4
  • 我是一个文采拙劣的人,不太喜欢写文章,尽管看过的爱情小说无数,但是依旧写不出好看舒服的文字,更不用说还原当时的场景...
    落花雨迷离阅读 48评论 0 0
  • 七律 二O一七年三月十三日 清风徐徐拂水面, 碧波潋滟映蓝天。 葩蕾绽放东南岸, 紫扇花开镜湖边。 朝沐...
    袁水根阅读 98评论 0 0
  • 《极简主义》这本书是训练营的第四本书,相对于前面几本书,感觉这本书容易多了,内容不多,也比较好理解,有很多案例解释...
    心兰Lan阅读 43评论 0 1
  • 没有人际的时候 灯火阑珊 也从一个梦想跳跃到另一个 期待的世界 雨不能打破宁静 不能在宁静的骨子里铭记 淋湿的状态...
    清杉_61fa阅读 321评论 2 9
  • flask-restful插件 注意,endpoint是用来给url_for反转url的时候指定的,如果不写end...
    蒲小帅丶阅读 6,166评论 1 10