文章目录
使用限定符
修改FragmentTest项目中的activity_main.xml文件
xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<fragment
android:id="@+id/leftFrag"
android:name="com.example.fragmenttest.LeftFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
将多余的代码删掉,只留下一个左侧Fragment,并让它充满整个父布局。接着在res目录下新建layout-large文件夹,在这个文件夹下新建一个布局,也叫作activity_main.xml
xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/leftFrag"
android:name="com.example.fragmenttest.LeftFragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<fragment
android:id="@+id/rightFrag"
android:name="com.example.fragmenttest.RightFragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3" />
</LinearLayout>
layout/activity_main布局只包含了一个Fragment,即单页模式,而layoutlarge/ activity_main布局包含了两个Fragment,即双页模式。其中,large就是一个限定符,那些屏幕被认为是large的设备就会自动加载layout-large文件夹下的布局,小屏幕的设备则还是会加载layout文件夹下的布局。
java
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button =(Button) findViewById(R.id.button);
button.setOnClickListener(this);
// replaceFragment(new RightFragment());
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.button:
replaceFragment(new AnotherRightFragment());
break;
default:
break;
}
}
private void replaceFragment(Fragment fragment){
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.rightFrag, fragment);
transaction.addToBackStack(null);
transaction.commit();
}
}
常见限定符
屏幕特征 | 限定符 | 描述 |
---|---|---|
大小 | small | 提供给小屏幕设备的资源。 |
大小 | normal | 提供给中等屏幕设备的资源。 |
大小 | large | 提供给大屏幕设备的资源。 |
大小 | xlarge | 提供给超大屏幕设备的资源。 |
分辨率 | ldpi | 提供给低分辨率设备的资源(120 dpi以下)。 |
分辨率 | mdpi | 提供给中等分辨率设备的资源(120 dpi~160 dpi)。 |
分辨率 | hdpi | 提供给高分辨率设备的资源(160 dpi~240 dpi)。 |
分辨率 | xhdpi | 提供给超高分辨率设备的资源(240 dpi~320 dpi)。 |
分辨率 | xxhdpi | 提供给超超高分辨率设备的资源(320 dpi~480 dpi)。 |
分辨率 | land | 提供给横屏设备的资源 |
分辨率 | pord | 提供给竖屏设备的资源 |
使用最小宽度限定符
最小宽度限定符(smallest-widthqualifier)允许我们对屏幕的宽度指定一个最小值(以dp为单位),然后以这个最小值为临界点,屏幕宽度大于这个值的设备就加载一个布局,屏幕宽度小于这个值的设备就加载另一个布局。
在res目录下新建layout-sw600dp文件夹,这就意味着,当程序运行在屏幕宽度大于等于600 dp的设备上时,会加载对应的布局。