第四章:了解Android用户界面
一. 适配显示方向
1. 安卓支持两种屏幕方向:垂直方向、水平方向
2. 当修改Android设备的显示方向时,当前的Activity会自动在新的方向上绘制它的内容(原因:当显示方向发生变化时,Activity的onCreate()被触发)
è当改变Android设备的方向时,当前的Activity实际上被销毁并且被重建了
3. 两种技术来处理屏幕方向的变化:
(1) 锚定
(2) 改变大小和重新定位
锚定视图
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.cpm/apk/res/android">
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Top Left"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"/>
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Top RIGHT"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"/>
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Bottom Left"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"/>
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Bottom RIGHT"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"/>
<Button
android:id="@+id/button5"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Middle"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"/>
</RelativeLayout>
二. 管理屏幕的方向变化
——探索设备改变方向时Activity发生的变化
1. 对任何Activity来说,每次方向发生变化时,他的OnPause()方法都会被调用,所以在该方法中保存任何需要的状态
2. 当一个Activity被销毁时,此Activity中只有被命名的视图的状体能被保存
3. 在配置发生变化时保存状态信息
当一个Activity被销毁时,下边的2个方***调用一个或都调用
onPause() onSaveInstanceState()
è当屏幕方向变化时,这种变化属于配置变化,这会使得当前Activity被销毁
4. 检测方向发生变化
(1) 使用getResource()方法得到设备在运行时屏幕当前的方向
(2)如何通过编程的方法检测当前Activity的方向:
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(getResource().getConfiguration().orientation==
Configuration.ORIENTATION_LANDSCAPE){
Log.d("StateInfo","Landscape");
}else if(getResource().getConfiguration().orientation==
Configuration.PORTRAIT){
Log.d("StateInfo","Portrait");
}
}
5. 控制Activity的方向
需求:希望应用能够只在某一个方向模式下显示
解决方法:
(1) 通过编程调用Activity类的SetRequestOrientation()方法强制改变方向
(2) 在AndroidManifest.xml文件中的<activity>元素上使用android:screenOrientation属性强制Activity处于某个方向