編輯:Android開發實例
前言
本章內容為Android開發者指南的Framework Topics/Application Resources/Resource Types/Layout章節,譯為"布局資源",版本為Android 3.2 r1,翻譯來自:"呆呆大蝦"。
Resources Types - Layout
譯者署名: 呆呆大蝦
譯者微博:http://weibo.com/popapa
版本:Android 3.2 r1
原文
http://developer.android.com/guide/topics/resources/layout-resource.html
參見
聲明 Layout
布局資源
布局(layout)資源用於定義Activity內用戶界面(UI)或者用戶界面控件的布局結構。
文件位置:
res/layout/filename.xml
文件名filename將作為資源ID。
編譯後資源的數據類型:
指向View或其子類的資源指針。
資源引用:
Java代碼:R.layout.filename
XML代碼:@[package:]layout/filename
語法:
<?xml version="1.0" encoding="utf-8"?>
<ViewGroup xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@[+][package:]id/resource_name"
android:layout_height=["dimension" | "fill_parent" | "wrap_content"]
android:layout_width=["dimension" | "fill_parent" | "wrap_content"]
[ViewGroup-specific attributes] >
<View
android:id="@[+][package:]id/resource_name"
android:layout_height=["dimension" | "fill_parent" | "wrap_content"]
android:layout_width=["dimension" | "fill_parent" | "wrap_content"]
[View-specific attributes] >
<requestFocus/>
</View>
<ViewGroup>
<View/>
</ViewGroup>
<include layout="@layout/layout_resource"/>
</ViewGroup>
注意:根元素可以是ViewGroup、View或<merge>,但只能有一個根元素且必須包含帶android 命名空間的xmlns:android屬性,如上例所示。
元素:
<ViewGroup>
作為View元素的容器,ViewGroup對象分很多種類,每一類都能用不同的方式指定其子元素的布局。ViewGroup對象的種類包括:LinearLayout、RelativeLayout和 FrameLayout。
並不是所有的ViewGroup派生類都能容納嵌套的View。 有些ViewGroup是AdapterView類的實現,因此就只能容納Adapter類型的子元素。
屬性:
android:id
資源 ID。為元素指定一個唯一的資源名稱,用於應用程序能實現對ViewGroup的引用。詳見下文android:id的值。
android:layout_height
度量或關鍵字。必填項。高度,用度量值、度量資源 ( dimension resource) 或關鍵字"fill_parent" 、"wrap_content"指定。參閱下文合法值。
android:layout_width
度量或關鍵字。必填項。寬度,用度量值、度量資源 (dimension resource) 或關鍵字"fill_parent" 、"wrap_content"指定。參閱下文合法值。
ViewGroup基類支持更多的屬性,每種子類的實現也支持很多其他屬性。完整的可用屬性請參閱各個類相關的參考文檔,例如LinearLayout XML attributes。
<View>
一個獨立的UI控件,通常是指一個部件(widget)。View對象的種類包括:TextView、Button和CheckBox。
屬性:
android:id
資源 ID。為元素指定一個唯一的資源名稱,用於應用程序能實現對ViewGroup的引用。詳見下文android:id的值。
android:layout_height
度量或關鍵字。必填項。高度,用度量值、度量資源 ( dimension resource) 或關鍵字"fill_parent" 、"wrap_content"指定。參閱下文合法值。
android:layout_width
度量或關鍵字。必填項。寬度,用度量值、度量資源 ( dimension resource) 或關鍵字"fill_parent" 、"wrap_content"指定。參閱下文合法值。
View基類支持更多的屬性,每種子類的實現也支持很多其他屬性。更多信息請參閱聲明Layout。完整的可用屬性請參閱各個類相關的參考文檔,例如TextView XML 屬性。
<requestFocus>
將屏幕的初始焦點設成其父元素,任何表示View類對象的元素都能包含這個內容為空的元素。但每個文件內只能出現一次本元素。
<include>
將另一個布局(layout)文件包含進來。
屬性:
layout
Layout資源。必填項。引用布局資源。
android:id
資源ID。覆蓋包含進來的layout資源中的根view ID。
android:layout_height
度量或關鍵字。覆蓋包含進來的layout資源中根view給出的高度。僅在同時給出android:layout_width時才生效。
android:layout_width
度量或關鍵字。覆蓋包含進來的layout資源中根view給出的高度。僅在同時給出android:layout_height時才生效。
只要是被包含的layout資源根元素支持的屬性,都能在<include>元素中包含進來,並且會覆蓋本資源內根元素已定義的屬性。
注意: 如果要覆蓋layout的度量(長度和寬度),必須同時覆蓋android:layout_height和 android:layout_width——不能只覆蓋長度或只覆蓋寬度。如果只覆蓋其中一個,則不會生效。(其他布局屬性,比如weight,仍然繼承自原有的layout。)
包含layout資源的另一種方式是使用ViewStub。這是個輕量級的View,它在實際被填充之前不占用layout空間。在實際被填充時,它再把android:layout屬性指定的layout資源文件動態包含進來。使用ViewStub的更多信息請參閱Layout特技: ViewStubs。
<merge>
在layout 的層次結構圖裡並沒畫出這個可充當根的元素。當明確知道本layout會被放入某個父View中去時,可以用<merge>作為根元素來包裹其下的子元素。如果希望本layout能被其他layout用<include>包含進去,並不再另外生成ViewGroup容器,本元素也特別有用。合並layout的更多信息請參閱Layout特技:合並。
android:id的值
對於ID的值,通常應該用"@+id/name"的語法格式。加號+表示這是個新的資源ID。如果R.java類中不存在此資源的話,aapt工具將在R.java類中生成一個新的resource整數標識。例如:
<TextView android:id="@+id/nameTextbox"/>
名稱nameTextbox現在作為資源ID和本元素關聯。然後在Java代碼裡可以用此ID名稱來引用這個TextView:
findViewById(R.id.nameTextbox) ;
本行代碼返回TextView對象。
然而,如果已經定義了一個ID資源(並且沒被使用過),就可以去掉android:id裡的加號並將此ID賦予View元素。
android:layout_height 和 android:layout_width的值
高度和寬度值能用Android支持的度量單位(px, dp, sp, pt, in, mm)或者以下關鍵字來表示:
值
描述
match_parent
和父元素匹配(充滿)。自API Level 8開始加入,以淘汰fill_parent。
fill_parent
和父元素匹配(充滿)。
wrap_content
僅本元素內容需要的大小。
自定義View元素
可以生成自定義的View和ViewGroup元素並且和標准布局元素一樣放入layout。還可以在XML元素內定義其所支持的屬性。更多內容請參閱創建自定義控件。
示例:
存放在res/layout/main_activity.xml的XML文件:
<?xml version="1.0" encoding="utf-8"?>
<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/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView" />
<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button" />
</LinearLayout>
以下代碼在Activity的onCreate()方法中裝入layout。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView.(R.layout.main_activity);
}
參見
* Declaring Layout
* View
* ViewGroup
策略模式其實特別簡單(聽到這句話,大家是不是心裡一下子放松了?)。比如排序,官方告訴大家我這裡有一個排序的接口ISort的sort()方法,然後民間各盡其能,實現
一般而言在Android上使用JAVA實現彩圖轉換為灰度圖,與J2ME上的實現方法類似,不過遇到頻繁地轉換或者是大圖轉換時,就必須使用NDK來提高速度了。本文主要
從 Android 5.0 Lollipop 開始提供一套 API 來支持嵌入的滑動效果。同樣在最
有時候,為了實現項目中的需求,完成設計好的用戶交互體驗,不的不把這些View重新改造成自己想要的效果。 Android原生的ListView是不支持左右滑動的,但