限定符(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#/