鏈接 【Android】Android UI 開發_問答_1.
常見佈局
如何在 MainActivity.java 中設置 activity 的佈局文件
- 在 onCreate 回調方法中
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_main2);
}
設計佈局文件的 Design 和 Text 模式什麼區別?
- Design (可視化界面) 看圖 可直接拖動控件 直觀但不精確
Text (文本界面) 看代碼
layout_toEndOf 同 layout_toRightOf 什麼區別?另一對對應的屬性是什麼?什麼區別?
- 指定控件的末端和右邊
- Start 和 Left,始端和左邊
Start、End的屬性只適用於level 17以上,
若同時出現,則Left、Right有效
如何在工程中修改工程的最小版本?
- Gradle Scripts > build.gradle,找到 minSdkVersion,修改後面的值
水平居中和垂直居中的屬性是什麼?
- layout_centerVertical 和 layout_centerHorizontal
線性佈局
如何新建佈局文件?佈局文件的文件名有什麼要求?
- layout 右擊,New > Layout Resource File
或 File > New > XML > Layout XML File - 後綴
.xml
文件名必須爲小寫字母、數字、_,這三種符號 (改)
線性佈局中子控件的對齊是哪個屬性?可取什麼值?
android:layout_gravity
,表示相對於父視圖組中的對齊方式- left、center、right (改)
線性佈局的方向由哪個屬性決定?可取什麼值?默認值是什麼?
android:orientation
- horizontal、vertical,水平、垂直
- horizontal,默認水平方向
控件的 id 可以相同嗎?
- 同一佈局文件中不可以,不同佈局文件中可以
線性佈局能嵌套使用嗎?怎麼用?
- 能嵌套使用
<LinearLayout>
<LinearLayout> ...
</LinearLayout>
</LinearLayout>
表格佈局
表格佈局中的錶行由哪個標籤確定?
- TableRow,有一個是一行
TableRow 的寬度和高度屬性是什麼?默認值是什麼?
-
android:layout_width
,android:layout_height
-
TableRow不需要設置寬度和高度,
它的寬度一定是 match_parent,高度一定是 wrap_content,
它其中的控件的寬度和高度均爲 wrap_content
如何確定子控件所在的列?
android:layout_column
指定列數,從0開始
表格佈局中,行中每列不會疊加,同列會後移
stretchColumns 屬性什麼意思?
- 當本列的定義總長度不足屏幕寬度時,指定列拉伸以充滿屏幕
子控件如何跨列?能跨行嗎?
android:layout_columnSpan
指定跨列的個數android:layout_rowSpan
指定跨行的個數 (改)
網格佈局
如何修改子控件上的文字及 id?幾種方式?
- 直接更改
android:text
屬性的值 - 切換到可視化界面,雙擊更改
如何跨列?需要哪兩個屬性配合?怎麼配合?
android:layout_columnSpan
和android:layout_gravity
android:layout_gravity = "fill"
如何跨行?
android:layout_rowSpan
android:layout_gravity = "fill"
如何設置總列數?
- android:columnCount
子控件的位置是怎麼確定的?
- 通過
android:layout_column
和android:layout_row
確定子控件位置
一個簡單的UI
View 是什麼?ViewGroup 是什麼?他們之間什麼關係?
- View 是用於創建用戶交互組件的小部件的基類 (基本單元),是一塊矩形區域
- ViewGroup 對象是一種不可見的容器,可容納其他 View 控件
- ViewGroup 繼承自 View
佈局文件中哪裏找到?佈局文件中的標籤是怎樣的結構?
- res > layout
<bulabula>...</bulabula> 或 <bulabula /> //符合 xml 語法結構要求
在佈局文件中的標籤屬性中的“android:”是什麼?
- 標籤屬性中 android 爲 android 的命名空間
即是 xmlns:android=“http://schemas.android.com/apk/res/android” (改)
線性佈局是什麼意思?它的標籤名是什麼?
- 使用單個水平行或垂直行來組織子項的佈局,其中控件按先後順序排列
- LinearLayout
android:orientation 這個屬性是什麼意思?它可取哪些值?
- 設置線性佈局的方向
- horizontal、vertical,水平、垂直方向
android:layout_width 和 android:layout_height這兩個屬性是什麼意思?它可取什麼值?值的含義是什麼?
- 指定 view 控件的寬度和高度
- 1.具體的數值
2.match_parent,該 view 同它的父 view 相同大小(減去父view的padding)
3.wrap_content,剛好可以包含它的內容大小(加上該view的padding)
TextView 這個標籤是什麼?
- 用於盛放用戶不可改其文字內容的控件 (改)
EditText 這個標籤是什麼?它同 TextView 什麼區別?它的 android:hint 屬性是什麼意思?
- 用於盛放用戶可輸入文字的控件 (改)
- TextView 是不可編輯的
- 當文本域爲空的時候,缺省顯示的提示信息
Button 這個標籤是什麼?它的 android:text 屬性什麼作用?
- 按鈕
- 設置按鈕上的文本
所有的標籤都可以有 android:id 這個屬性,該屬性是什麼含義,一般如何定義它的值?id 的值在哪個 java 文件中定義的?
- 該屬性定義了該 view 的唯一的標識符,通過該 id 在程序中引用該對象
android:id="@+id/資源名"
id中最好含有它的類別及能夠表達它的含義的英文單詞- 編譯 app 時,SDK 工具使用 ID 名在 gen/R.java 文件中創建一個新的資源 ID 來引用 EditText 元素
string.xml 文件是什麼文件?它的文件結構是什麼樣的?什麼是鍵值對?
- 字符串資源文件
<string name="...">value</string>
,鍵值對形式- Key-Value,每個鍵對應一個值,通過 Key 尋找 Value
對值的使用可以基由鍵來引用 (改)
android:weight 屬性什麼作用?如何讓 EditText 充滿一行中的剩餘空間?
- 設置權重
- 單獨給 EditText 設置
android:layout_weight= "1"
R.java這個文件裏都有什麼?這個文件能手工修改嗎?
- R.java爲系統自動生成並管理的java文件,它裏面定義了一些內嵌的類
內嵌類中定義了一些常量,這些常量用於代表系統中用到的資源
在編程時,需要使用這些資源的話,我們就引用該類中的常量 - 這個文件程序員是不能介入修改的
主題和樣式
什麼是樣式?主題是什麼?同樣式什麼聯繫?
- 樣式,反映 view 或者 window 的外觀和格式的屬性集合
- 主題,是應用於整個 Activity 或 app 的樣式,而不是針對某個 View
- 主題就是把樣式應用於所有 view,包括非視圖元素
樣式文件存放在哪裏?結構是怎樣的?怎麼在佈局文件中引用樣式?
- res > values > styles
所有的有關樣式的定義可以從佈局文件中取出,放到 XML 樣式定義文件中 - 根節點必須是
<resource>
,其中每個樣式 (style) 由 name 唯一標識,
<resources>
<style name="CodeFont" parent="TextAppearance.AppCompat">
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">#00FF00</item>
</style>
</resources>
- 例,樣式定義文件命名爲CodeFont,在佈局文件的TextView控件中引用
<TextView style="@style/CodeFont" />
樣式的繼承是什麼?如何繼承系統樣式?如何繼承自定義樣式?
- 字面意思就是繼承上級的屬性,這裏指對所繼承樣式的擴展
- 自定義 GreenText 繼承系統樣式
<style name="GreenText" parent="@android:style/TextAppearance">
從支持庫繼承核心應用樣式,
相應的parent="TextAppearance.AppCompat"
支持庫樣式通常具有與平臺樣式相似的名稱,但包含一個 AppCompat - 繼承自定義樣式 GreenText,
<style name="GreenText.Large">
如果某個樣式應用到某個 view 的時候,而這個樣式中有 View 不能支持的屬性,會怎麼樣?
- 會被忽略,只對支持的屬性起作用
怎麼設置樣式?如果將樣式設置到 ViewGroup 時,該 group 中的 view 會使用該樣式嗎?
style="@style/CodeFont"
- 不會
如何設置主題?如何微調已有主題?
- 在清單文件中的
<application>
標籤或<activity>
標籤上應用
<application android:theme="@style/Theme.AppCompat" ... >
- 自定義主題,最好的方法是從支持庫擴展這些樣式並覆蓋某些屬性
繼承已有主題,通過擴展覆蓋微調
<style name="AppTheme" parent="BaseAppTheme" />