Android的UI界面設計在main_activity.xml文件中進行,其路徑如下圖所示。
接下來我們進行UI界面的設計。
(1)首先創建一個空白應用。
(2)找到main_activity.xml文件所在位置,清空裏面的原有文件,我們來自己實現一個UI界面
A .我們需要先創建一個Layout佈局,在android中支持幾種佈局,分別是:<LinearLayout>,<AbsoluteLayout >,<FrameLayout> ,<GridLayout >,<RelativeLayout> ,<TableLayout>。
在這裏我們創建一個<LinearLayout>並對佈局的長、寬以及排列方式進行設置。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
</LinearLayout>
其中,orientation屬性表示佈局的排列方式,在這裏我們使用垂直排列的方式來進行佈局。
B .然後我們在已創建的佈局中加入一個TextView控件,接下來我們會了解一下控件中的相關屬性,但在此之前,我們需要先了解一下Android的R.java文件。
a.R.java簡介
R.java文件是編譯器自動生成的,它無需開發人員對其進行維護。R.java會自動收錄當前應用中所有的資源,並根據這些資源建立對應的ID,包括:佈局資源、控件資源、String資源、Drawable資源等。我們可以簡單的把R.java理解成是當前Android應用的資源字典。
在當前項目不能包含任何錯誤的前提下,手動刪除了R.java文件,編譯器會立即重新生成一個R.java文件;在res/目錄中增加了一個新的資源,編譯器也會立即把這個資源的ID收錄到R.java文件中。,但是都是有個前提的,就是當前項目不能包含任何錯誤。當發現在更新的資源後,R.java沒有對此資源進行收錄,那麼就需要檢查一下當前項目是否存在錯誤。
b.R.java所在路徑(如下圖所示)
在瞭解完R.java文件後,我們接着回到控件中相關屬性的介紹,我們重新看到main_activity.xml文件。
c.通常第一步,我們需要將控件加到索引庫裏
<TextView
android:id="@+id/text1"/>
其中@+表示將後面的內容作爲索引的變量名字加入到索引組庫當中,id表示將其加入到id當中,這裏表示將text1作爲變量名加入到索引庫的id中。
d .設置控件佈局的長和寬。
android:layout_width="wrap_content"
android:layout_height="wrap_content"
這裏layout_width和layout_height中可設置的屬性有:wrap_content、match_parent、fill_parent。
wrap_content:表示寬度或高度足以包含他們的內容即可
match_parent:表示與父元素的大小進行匹配(根據權重確定大小)
fill_parent:表示填充父元素
e.控件佈局的排列方式
android:layout_gravity="center_horizontal"
在這裏表示水平居中,值得注意的是,當你將整體佈局設置爲android:orientation="vertical"時,將layout_gravity設置爲center_vertical將是無效的,因爲整體佈局已經被確定爲垂直排列方式,因此無法進行垂直方向的居中。
除了水平和垂直居中外,layout_gravity還可以設置置頂,置底,靠左靠右等。
f.設置內容的高度
android:height="100dp"
g.設置控件的背景
android:background="@mipmap/ic_launcher"
在項目中,程序已經給我們提供了相關的應用圖片,例如博主所創建的Android項目在下圖目錄中有相應的圖片,在這裏我們可以加以利用。
值得注意的是,這裏面提供的相應圖片已經被程序加入到索引庫中,所以我們需要對其引用。
我們打開R.java文件,在文件結構中找到mipmap對應的地方,找到ic_lancher對應的索引值。
接下來我們在main_activity.xml文件中進行引用。
@mipmap/ic_launcher
其中,@表示引用R.java中的資源,在這裏我們選定mipmap中的ic_launcher,並將其設置爲背景。
h.設置控件內容的排列方式
android:gravity="bottom"
這裏類似控件的佈局排列方式,代碼中我們將排列方式設置爲置底。
i.設置padding屬性,表示距離某個邊的距離,這裏涉及到的單位sp我們後面再進行介紹。
android:paddingBottom="100sp"
j.設置文本
首先,我們需要將文本字符串寫入資源R.java中,那麼應該怎麼寫呢?我們打開res中的values文件,會看到strings.xml文件,我們可以通過對該文件進行修改,從而達到將字符串寫入索引庫中的目的。
我們打開strings.xml文件並進行修改,將我們需要的字符串進行命名並設置對應的字符串內容。
<resources>
<string name="app_name">Myapp</string>
<string name="textViewName">This is a text veiw.</string>
</resources>
在該段代碼中,博主將變量textViewName設置爲”This is a text veiw.“。這樣我們就成功將該字符串變量加入到索引庫中,它會被放到R.java中的string中。我們回到main_activity.xml對其進行引用。
android:text="@string/textViewName"
k.設置字體、字體大小和字體樣式
android:textSize="20.6sp"
android:textStyle="bold|italic"
android:typeface="serif"
在設置字體樣式時,如果需要設置多種字體樣式時,需要加上“|”隔開。
最後我們整合一下main_activity.xml文件。
<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:id="@+id/text1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:height="100dp"
android:background="@mipmap/ic_launcher"
android:gravity="bottom"
android:paddingBottom="100sp"
android:text="@string/textViewName"
android:textSize="20.6sp"
android:textStyle="bold|italic"
android:typeface="serif" />
</LinearLayout>
這個文件將會在MainActivity.java文件中進行調用顯示,它被放在onCreate方法中,當然對於頁面的設計我們也可以用代碼來實現。我們看看MainActivity.java.
a.我們使用下列代碼來調用main_activity.xml文件。
setContentView(R.layout.main_activity);
b.設置控件的屬性
首先獲取控件的id,並對其屬性進行設置。
TextView tv = (TextView) findViewById(R.id.text1);
tv.setBackgroundResource(R.mipmap.ic_launcher);
最後我們整合一下MainActivity.java文件。
package com.example.myapp;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import com.example.myapp.ui.main.MainFragment;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
TextView tv = (TextView) findViewById(R.id.text1);
tv.setBackgroundResource(R.mipmap.ic_launcher);
}
}
最終的結果如下圖。
補充:屬性的相關單位
in(inch) --英尺
mm --毫米
dpi = dots per inch(每英尺中的像素點個數)
dp Density-Independent Pixels : 160dpi
(自動適配計算對應值,不會因爲屏幕大小而影響像素,用於設置控件大小)
sp scaled Pixels based on prefered font size(用於設置字體大小)