我看到別人的程序,想學(xué)習(xí)人家的UI布局是怎么做的,如何能窺探一二?
在學(xué)習(xí)ViewGroup和Layout時(shí)我們可能會(huì)有一個(gè)疑問(wèn),如果我在Xml布局文件中不放置Layout,直接放TextView等組件的時(shí)候,它是用什么方式布局的? 解決方法:
Android的SDK中自帶了一個(gè)查看UI布局層級(jí)結(jié)構(gòu)的工具:HierarchyView.bat。在模擬器運(yùn)行的情況下,使用該工具可以將當(dāng)前的Activity中的UI組件們以對(duì)象樹(shù)的形式展現(xiàn)出來(lái),每一個(gè)組件所包含的屬性也能窺探得到。在對(duì)象樹(shù)上的任意節(jié)點(diǎn)可以看到該節(jié)點(diǎn)及以下節(jié)點(diǎn)的顯示效果。使用HierarchyView能深入全面的理解xml布局文件,更可以通過(guò)它來(lái)學(xué)習(xí)別人優(yōu)秀的布局技巧。
(看到那個(gè)不起眼的hierachyview.bat文件沒(méi),哎,竟然它是學(xué)習(xí)Android界面設(shè)計(jì)的超級(jí)利器) 從圖中可以看到QQ登錄界面中的核心部分是用相對(duì)布局?jǐn)[放的,甚至可以看到有的TextView還用的是IDE自動(dòng)起的ID:TextView01。下面我們解決第二個(gè)問(wèn)題:找到默認(rèn)的布局方式是什么? 我們建一個(gè)新項(xiàng)目,Main.xml中只放一個(gè)TextView, <?xml version="1.0" encoding="utf-8"?>
<TextView android:text="hi" android:id="@+id/TV"
android:layout_width="wrap_content" android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android"></TextView>
看看他的布局層次是什么樣的:
我們可以看到頂級(jí)元素是個(gè)PhoneWindow,其下有一個(gè)線(xiàn)性布局LinearLayout,再下面有一個(gè)應(yīng)用程序標(biāo)題條,
標(biāo)題條是由一個(gè)幀布局FrameLayout和一個(gè)TextView組成。
我們自己寫(xiě)的TextView也放在了一個(gè)Layout里,這個(gè)Layout就是ID叫做content的FrameLayout。
接下來(lái)我們?cè)賱?chuàng)建一個(gè)帶有LinearLayout的程序,看看他的層次結(jié)構(gòu)來(lái)確定一下,那個(gè)ID是content的FrameLayout是固有的還是因?yàn)闆](méi)布局元素由系統(tǒng)自動(dòng)加上去的。 <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/LinearLayout01"
android:layout_width="fill_parent" android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView android:text="haha" android:id="@+id/TextView01"
android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
</LinearLayout> 下面是新程序的UI界面層次結(jié)構(gòu)圖:
這一次我們同樣看到了那個(gè)Id是content的Framelayout:) 這說(shuō)明它是窗口布局結(jié)構(gòu)里固有的。 </font |