1. 程式人生 > >Android學習筆記——UI設計

Android學習筆記——UI設計

在Android應用中,UI(User Interface)介面是人與程式之間資料傳遞,互動的重要媒介和對話介面。Android程式開發最重要的一個環節就是介面處理,介面的美觀程度直接影響使用者的第一印象,因此,開發一個整齊,美觀的介面至關重要。

VIew和ViewGroup
Android應用的介面是由View和ViewGroup物件構建而成的。View類是Android系統平臺上使用者介面表示的基本單元,View的一些子類被統稱為Widgets,它們提供了諸如文字輸入框和按鈕之類的UI物件的完整實現。
ViewGroup是View的一個擴充套件,它可以容納多個View,通過ViewGroup類可以建立有聯絡的子View組成的複合控制元件。

在Android UI設計中需重點掌握UI中的佈局型別,掌握樣式和主題,瞭解程式國際化的問題。

下面通過一個“手機頁面資訊”Demo進行簡單的UI設計。

設計思路(實現原理)
1)將準備好的八個圖示複製到res/drawable資料夾下
2)建立一個垂直的線性佈局,並在線性佈局中建立4個相對佈局
3)在相對佈局中新增相應的TextView
4)在values檔案下的style.xml檔案中存放抽取出來的樣式
5)建立values-zh-rCN、values-en-rUS資料夾,並在資料夾中建立strings.xml檔案

1,建立程式,建立一個空的Activity命名為FirstActivity,在activity_first.xml中寫入相對應的佈局檔案。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen
/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.a19864.lab_3.MainActivity"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/darker_gray" android:orientation="vertical" tools:context=".MainActivity" > <RelativeLayout style="@style/h_wrap_content" android:layout_marginTop="10dp"> <TextView style="@style/tv_style" android:layout_alignParentLeft="true" android:layout_marginLeft="10dp" android:drawableTop="@drawable/clound" android:text="@string/_cloud" /> <TextView style="@style/tv_style" android:layout_alignParentRight="true" android:layout_marginRight="10dp" android:drawableTop="@drawable/bluetooth" android:text="@string/_bluetooth" /> </RelativeLayout> <RelativeLayout style="@style/h_wrap_content" android:layout_marginTop="10dp"> <TextView style="@style/tv_style" android:layout_alignParentLeft="true" android:layout_marginLeft="10dp" android:drawableTop="@drawable/gesture" android:text="@string/_gesture" /> <TextView style="@style/tv_style" android:layout_alignParentRight="true" android:layout_marginRight="10dp" android:drawableTop="@drawable/gps" android:text="@string/_gps" /> </RelativeLayout> <RelativeLayout style="@style/h_wrap_content" android:layout_marginTop="10dp"> <TextView style="@style/tv_style" android:layout_alignParentLeft="true" android:layout_marginLeft="10dp" android:drawableTop="@drawable/info" android:text="@string/_system_info" /> <TextView style="@style/tv_style" android:layout_alignParentRight="true" android:layout_marginRight="10dp" android:drawableTop="@drawable/internet" android:text="@string/_internet" /> </RelativeLayout> <RelativeLayout style="@style/h_wrap_content" android:layout_marginTop="10dp"> <TextView style="@style/tv_style" android:layout_alignParentLeft="true" android:layout_marginLeft="10dp" android:drawableTop="@drawable/language" android:text="@string/_language" /> <TextView style="@style/tv_style" android:layout_alignParentRight="true" android:layout_marginRight="10dp" android:drawableTop="@drawable/notifycation" android:text="@string/_set_notifycation" /> </RelativeLayout> </LinearLayout> </RelativeLayout>

2,將佈局檔案中的樣式檔案單獨抽取,寫入style.xml檔案中。

resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
    <style name="AppBaseTheme" parent="android:Theme.Light">
    </style>
    <!-- 寬 match——parent 高  wrap_content-->
    <style name="h_wrap_content">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">wrap_content</item>
    </style>
    <!-- 寬高都 match——parent -->
    <style name="tv_style">
        <item name="android:layout_width">145dp</item>
        <item name="android:layout_height">90dp</item>
        <item name="android:gravity">center</item>
        <item name="android:paddingTop">8dp</item>
        <item name="android:paddingBottom">8dp</item>
        <item name="android:drawablePadding">5dp</item>
        <item name="android:background">@android:color/white</item>
    </style>

</resources>

3,選擇Project檢視下,在app-src-main-res目錄下建立values-zh-rCN、values-en-rUS資料夾,並在這兩個資料夾下建立相應的strings.xml檔案,進行國際化。

values-zh-rCN資料夾下的strings.xml檔案如下所示:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">手機資訊頁面</string>
    <string name="menu_settings">設定</string>
    <string name="hello_world">你好,世界!</string>
    <string name="_cloud">雲通訊</string>
    <string name="_bluetooth">藍芽</string>
    <string name="_gesture">自定義手勢</string>
    <string name="_gps">定位</string>
    <string name="_system_info">系統資訊</string>
    <string name="_internet">網路</string>
    <string name="_language">語言設定</string>
    <string name="_set_notifycation">通知欄設定</string>
</resources>
values-en-rUS資料夾下的strings.xml檔案如下所示:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">phoneInfo</string>
    <string name="menu_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <string name="_cloud">Cloud</string>
    <string name="_bluetooth">Bluetooth</string>
    <string name="_gesture">Gesture</string>
    <string name="_gps">Gps</string>
    <string name="_system_info">SystemInfo</string>
    <string name="_internet">Internet</string>
    <string name="_language">Language</string>
    <string name="_set_notifycation">Notifycation</string>
</resources>

4,接下來需要在FirstActivity中編寫與使用者互動的邏輯程式碼。

public class FirstActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);
    }
}

5,執行結果。