Android入门学习五:用户界面

屏幕的构成

活动包含了视图和试图组。视图是一个可以在屏幕上显示的小部件,例如按钮、标签、文件框。视图派生自基类android.view.View

一个或多个视图可以组成一个视图组,视图组(本身就是一种特殊的视图类型)提供了一种布局,您可以按该布局指定视图的外观和顺序,视图组派生于基类 android.view.viewGroup。android支持以下五种视图组:

线性布局(LinearLayout)
以单行或单列的形式排列视图
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
<Button
    android:layout_width="160dp"
    android:layout_height="wrap_content"
    android:text="Button" 
    android:layout_gravity="left"
    android:layout_weight="1" />
<Button
    android:layout_width="160dp"
    android:layout_height="wrap_content"
    android:text="Button"
    android:layout_gravity="center"
    android:layout_weight="2" />
<Button
    android:layout_width="160dp"
    android:layout_height="wrap_content"
    android:text="Button" 
    android:layout_gravity="right"
    android:layout_weight="3" />
</LinearLayout>


表格布局(TableLayout)
以行和列的形式组织视图,每一行可以包含一个或者多个视图,行内的每一个视图构成一个单元格,每一列的宽度由最大单元格的宽度决定
<TableLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent"
    >
    <TableRow>
        <TextView
            android:text="User Name:"
            android:width ="120dp"
            />
        <EditText
            android:id="@+id/txtUserName"
            android:width="200dp" />
    </TableRow>
    <TableRow>
        <TextView 
            android:text="Password:"
            />
        <EditText 
            android:id="@+id/txtPassword" 
            android:password="true" 
            />
    </TableRow>
    <TableRow>        
        <TextView />        
        <CheckBox android:id="@+id/chkRememberPassword"
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content"
            android:text="Remember Password"
            />   
    </TableRow>
    <TableRow>
        <Button 
            android:id="@+id/buttonSignIn" 
            android:text="Log In" />
    </TableRow>
</TableLayout>


帧布局(FrameLayout)
在屏幕上可以用来显示一个单个视图的占位符,添加到FrameLayout中的视图常常锚定在布局的左上方。如果在FrameLayout中添加另一个视图(如button),这个视图将覆盖先前的视图。虽然在FrameLayout可以添加多个视图,但是每一个视图都是堆叠在前一个上面。可以放置一系列图片做成动画。
ScrollView是一种特殊类型的FrameLayout。
<RelativeLayout
    android:id="@+id/RLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android"
    >
    <TextView
        android:id="@+id/lblComments"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello, Android!"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        />
    <FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/lblComments"
        android:layout_below="@+id/lblComments"
        android:layout_centerHorizontal="true"
        >
        <ImageView
            android:src = "@drawable/droid"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <Button
            android:layout_width="124dp"
            android:layout_height="wrap_content"
            android:text="Print Picture" />
        
    </FrameLayout>
</RelativeLayout>


相对布局(RelativeLayout)
可用于指定子视图相对于彼此之间如何定位的,由下面一些属性来定位
  • layout_alignParentTop
  • layout_alignParentLeft
  • layout_alignLeft
  • layout_alignRight
  • layout_bleow
  • layout_centerHorizontal


<RelativeLayout
    android:id="@+id/RLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android"
    >
    <TextView
        android:id="@+id/lblComments"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello, Android!"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        />
    <FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/lblComments"
        android:layout_below="@+id/lblComments"
        android:layout_centerHorizontal="true"
        >
        <ImageView
            android:src = "@drawable/droid"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <Button
            android:layout_width="124dp"
            android:layout_height="wrap_content"
            android:text="Print Picture" />
        
    </FrameLayout>
</RelativeLayout>


绝对布局(AbsoluteLayout)
已废弃,可以指定其子元素的确切位置
<AbsoluteLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android"
    >
<Button
    android:layout_width="188dp"
    android:layout_height="wrap_content"
    android:text="Button"
    android:layout_x="126px"
    android:layout_y="361px"
    />
<Button
    android:layout_width="113dp"
    android:layout_height="wrap_content"
    android:text="Button"
    android:layout_x="12px"
    android:layout_y="361px"
    />
</AbsoluteLayout>


适应显示方向
当改变Android设备的方向时,当前活动实际上是先被销毁,然后在重新创建。这是因为当显示方向上发生改变时,都会触发活动的onCreate()方法。
通常可以使用下面两种技术来处理屏幕方向的变化
锚定视图.
   将视图锚定到屏幕的四条边是最容易的方法
   涉及到的属性有很多,下面举几个常见的
   layout_alignParentLeft  将视图与其父视图的左侧对齐
   layout_alignParentRight  将视图与其父视图的右侧对齐
   layout_centerVertical      将视图在其父视图中水平居中
调整大小和重新定位
基于屏幕方向定制用户界面的更简单方法是为每个方向上的用户界面创建一个新的视图文件。为了支持横屏模式,可以在res下新建一个文件夹,取名为layout-land

管理屏幕变化方向

当设备旋转时,活动先被销毁,然后被重新创建。所以对于任何活动。需要在onPause()方法中保存任何你需要保存的状态。当活动被销毁时,只有那些被命名的视图(android:id)才能保持他们的状态。

以编程的方式创业页面
可以通过xml的方式来拖动来展示页面,也可以通过编程方式创建页面。两者效果一样,但是在工作量上面xml方式更占优势

倾听用户页面通知
用户和用户页面在两个层面上进行交互,活动层面和视图层面。在活动层面,除了通常的一些方法外还有下面一些常用的方法
onkeyDown() 当键盘按下并且没有被活动中的任何视图处理时调用;
onkeyUp() 当键盘弹起并且没有被活动中的任何视图处理时调用;
onMenuItemSelected()  当用户选择了面板的菜单时调用;
onMenuOpened()  当用户打开了面板的菜单时调用;

你可能感兴趣的:(tablelayout,FrameLayout,RelativeLayout,AbsoluteLayout,LinearLayout)