新建一个android工程,res目录下会默认地生成一个layout文件夹,这里存放布局文件,现在为了让横屏和竖屏时Activity分别加载2套不同的布局文件,可以使用配置修饰符的方法实现。
layout-port下的同名布局文件main.xml:
values-en下的strings.xml:
实现方法:在res目录下新建layout-port和layout-land文件夹,-port和-land成为配置修饰符,里面存放的资源叫做备用资源,layout里面存放的资源称为默认资源。-land代表横屏,-port代表竖屏。
新建工程时,生成的布局文件:main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
</LinearLayout>
layout-port下的同名布局文件main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello_port" />
</LinearLayout>
layout-land下的同名布局文件main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello_land" />
</LinearLayout>
这3个布局文件名称一样,只是引用的字符串资源不一样:
<string name="hello">Hello World, TestlayoutActivity!</string>
<string name="hello_port">Hello World, TestlayoutActivity-Port!</string>
<string name="hello_land">Hello World, TestlayoutActivity-Land!</string>
activity的代码:
public class TestlayoutActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
安装程序,启动,观察效果:
手机横屏时 :
手机竖屏时:
android系统会根据屏幕的方向自动选择要加载的是layout-land还是layout-port的布局文件。
既然布局可以使用配置修饰符,那么res目录下的其他资源按理说也可以,比如实现国际化,可以在res下创建不同修饰符的values文件,如图:
values-en适用于手机是英文语言环境的情况,values-zh适用于手机是中文语言环境的情况。
values-zh下的strings.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">测试layout</string>
<string name="hello_port">嗨,TestlayoutActivity-Port!</string>
<string name="hello_land">嗨, TestlayoutActivity-Land!</string>
</resources>
values-en下的strings.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello_port">Hello World, TestlayoutActivity-Port!</string>
<string name="hello_land">Hello World, TestlayoutActivity-Land!</string>
<string name="app_name">Testlayout</string>
</resources>
设置手机的语言为中文,横竖屏时效果如下: