Android中的屏幕适配

来源:互联网 发布:最近网络同学聚会歌曲 编辑:程序博客网 时间:2024/06/05 03:07

方式一:图片适配,原理是不同像素密度的手机加载不同资源文件夹下的文件

方式二:dimensxml,原理是不同像素密度的手机加载不同的dimens.xml的文件

方式三:layout适配,原理不同像素密度的手机加载不同的布局文件

          该方式效率并不高,就相当于是根据不同的手机,建立不同的layout文件,例如使用的是800*480的手机,建立相应的layout文件的规则为layout-800x480

方式四:java代码的适配。(首先获取手机屏幕的高矿像素值,然后根据屏幕的宽高像素的比例,分配给控件)代码如下所示:

public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.activity_main);        //获取父控件        RelativeLayout rl = (RelativeLayout) findViewById(R.id.rl);        TextView tv = (TextView) findViewById(R.id.tv);        //获取屏幕的高和宽        DisplayMetrics metrics = new DisplayMetrics();        getWindowManager().getDefaultDisplay().getMetrics(metrics);        //获取屏幕的高和宽的一半        int halfHeight=(int) (metrics.heightPixels/2+0.5);        int halfWidth=(int) (metrics.widthPixels/2+0.5);        //给控件设置宽和高  (现将宽高的规则在其父布局上定义出来,在作用在子控件上)        LayoutParams layoutParams = new RelativeLayout.LayoutParams(halfWidth, halfHeight);        tv.setLayoutParams(layoutParams);    }

关于Android 中的DisplayMetrics类的用法
通过查询得知:Android 已经提供了DisplayMetircs 类可以很方便的获取手机的分辨率。Andorid.util 包下的DisplayMetrics 类提供了一种关于显示的通用信息,如显示大小,分辨率和字体。
为了获取DisplayMetrics,首先要初始化对象,如下所示:

DisplayMetrics metrics = new DisplayMetrics();

注意:这里使用构造函数初始化的时候,不需要传递任何参数

getWindowManager().getDefaultDisplay().getMetrics(metrics);

当前窗口的一些显示信息就放在了metrics 中,然后通过属性heightPixels和widthPixels可以获取屏幕宽高的像素值。

接下来总结一下dip、px和sp的区别:
dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。
px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。
sp: scaled pixels(放大像素). 主要用于字体显示best for textsize,根据 google 的建议,TextView 的字号最好使用 sp 做单位

关于layoutParams的介绍:
查看API发现These supply parameters to the parent of this view specifying how it should be arranged。
这里总结一下获取屏幕尺寸的三种方式:

方式一:通过DisplayMetrics获取DisplayMetrics metrics = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(metrics);
方式二:使用getResource方式获取    DisplayMetrics metrics2 = getResources().getDisplayMetrics(); 
方式三:通过屏幕的默认分辨率获取  Display display = getWindowManager().getDefaultDisplay();   System.out.println(display.getWidth());  System.out.println(display.getHeight()); 

第三种方式获取屏幕的高度和宽度的方法已经废弃!

通常用方式以获取屏幕的宽度和高度。
方式五:权重适配(只有线性布局才会有权重适配)

0 0