限定符(Qualifiers),Android AutoLayout

本文介绍了Android中如何利用限定符进行屏幕适配,通过创建layout-large和layout-sw600dp目录调整不同屏幕尺寸的布局。同时讲解了AutoLayout的原理,它是如何根据屏幕分辨率进行等比例分配,实现更灵活的布局设计,并提供了引入及使用AutoLayout的相关步骤。
摘要由CSDN通过智能技术生成
限定符(Qualifiers)


res目录下新建layout-large文件夹,然后在这个文件夹下新建activity_main.xml布局;

首先是在layout文件夹中的activity_main.xml中布局。

布局代码如下:
< fragment
android :id= "@+id/left_fragment"
android :name= "com.dome.LeftFragment"
android :layout_width= "match_parent"
android :layout_height= "match_parent" />
只需要一个Framgent就行,属于一个单页模式( 单面板);


限定符也可以自己定义
而在 layout-large文件夹中同一个名字的activity_main.xml布局中有种两个Framgent
属于是双页模式(双面板);
代码如下:
< fragment
android :id= "@+id/left_fragment"
android :name= "com.dome.LeftFragment"
android :layout_width= "0dp"
android :layout_height= "match_parent"
android :layout_weight= "1" />

< fragment
android :id= "@+id/right_fragment"
android :name= "com.dome.RightFragment"
android :layout_width= "0dp"
android :layout_height= "match_parent"
android :layout_weight= "3" />


res目录下新建layout-sw600dp文件夹,然后在这个文件夹下新建activity_main.xml布局,代码如下所示:


< LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android" android:layout_width ="match_parent" android:layout_height ="match_parent" > < fragment android:id ="@+id/left_fragment" android:name ="com.example.fragmenttest.LeftFragment" android:layout_width ="0dp" android:layout_height ="match_parent" android:layout_weight ="1" /> < fragment android:id ="@+id/right_fragment" android:name ="com.example.fragmenttest.RightFragment" android:layout_width ="0dp" android:layout_height ="match_parent" android:layout_weight ="3" /> </ LinearLayout >


layout-sw600dp:意味着在屏幕宽度大于600dp的设备上运行程序会加载layout-sw600dp文件夹中的activity_main.xml布局;
当在屏幕宽度小于600dp的设备上运行程序时,会默认的加载默认的布局,就是layout文件夹中工的activity_main.xml布局。

Android AutoLayout
autulayout其实就是将设计师给的那个设计图上面的像素的尺寸直接填写上即可;
别人的:


<RelativeLayoutandroid:layout_width="match_parent"android:layout_height="86px"android:layout_marginTop="26px"android:background="#ffffffff"><ImageView android:id="@+id/id_tv_add" android:layout_width="34px" android:layout_height="34px" android:layout_gravity="center_vertical" android:layout_marginLeft="276px" android:layout_marginTop="26px" android:src="@mipmap/add" /><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="26px" android:layout_toRightOf="@id/id_tv_add" android:text="新增旅客" android:textColor="#1fb6c4" android:textSize="32px" /></RelativeLayout>


<RelativeLayout android:layout_width="match_parent" android:layout_height="108px" android:layout_marginTop="26px" android:background="#ffffffff" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="22px" android:layout_marginTop="16px" android:text="王大炮 WANG.DAPAO" android:textColor="#333" android:textSize="28px" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginBottom="16px" android:layout_marginLeft="22px" android:text="护照:G50786449" android:textColor="#999" android:textSize="26px" /></RelativeLayout>


AutoLayoutActivity是专为安卓手机屏幕适配而设计的开源项目,AutoLayoutActivity根据开发者在View布局时设置宽高的值,再根据手机屏幕分辨率的不同,而进行等比例的分配。也就类似于我们经常用到的适配方法在LinearLayout中设置的权重比例。在开发过程中,总有一些地方是无法用match_parent和wrap_content进行分配,或者相对布局来解决。所以引入了AutoLayout,这样便可以随意设置px或者dp,而不会造成在不同手机屏幕分辨率上的不同显示效果,甚至变形了。


在build.gradle中引入依赖包
dependencies {compile'com.zhy:autolayout:1.4.5'}

引入完成后,在AndroidManifest清单配置中加入当前预览的宽高配置,否则会报错!这里我选择的是我自己的手机屏幕分辨率。可以根据自己喜好选择。

<meta-data android:name="design_width" android:value="1080"></meta-data><meta-data android:name="design_height" android:value="1920"></meta-data>

默认使用的高度是设备的可用高度,也就是不包括状态栏和底部的操作栏的,如果你希望拿设备的物理高度进行百分比化:
可以在Application的onCreate方法中进行设置:
AutoLayoutConifg.getInstance().useDeviceSize();


然后就是项目中引入AutoLayoutActivity
选择基类时的Activity为AutoLayoutActivity,AutoLayoutActivity继承了所有的Activity的属性,可以放心使用。 
结构搭建完成以后,FrameLayout、LinearLayout、RelativeLayout等几大常用布局,便有了AutoLayout的自动适配属性;


当然也有不引入AutoLayoutActivity的就是有的开发者不愿继承AutoLayoutActivity,其实也没关系
可以在XML布局中,直接调用属性包的Layout.对应是:

LinearLayout ==> AutoLinearLayout;RelativeLayout ==> AutoRelativeLayout;FrameLayout ==> AutoFrameLayout;



http://note.youdao.com/share/?id=868ca4767f7fd15055d01ba73ccf00bd&type=note#/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值