新聞中心
框架布局是將控件組織在Android程序的用戶(hù)界面中最簡(jiǎn)單的布局類(lèi)型之一。

公司主營(yíng)業(yè)務(wù):成都網(wǎng)站制作、網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶(hù)真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶(hù)帶來(lái)驚喜。成都創(chuàng)新互聯(lián)推出稱(chēng)多免費(fèi)做網(wǎng)站回饋大家。
理解布局對(duì)于良好的Android程序設(shè)計(jì)來(lái)說(shuō)是非常重要的。在這個(gè)教程里,你將學(xué)到所有關(guān)于框架布局的知識(shí),它們主要用來(lái)在屏幕上組織特別的或重疊的視圖控件。使用得當(dāng)?shù)脑?huà),很多有趣的Android程序用戶(hù)界面都可以基于框架布局來(lái)設(shè)計(jì)。
什么是框架布局
框架布局是Android開(kāi)發(fā)者組織視圖控件最簡(jiǎn)單和最有效的布局之一。它們使用得比其它一些布局要少一些,只是因?yàn)樗鼈円话阒挥糜陲@示單個(gè)視圖,或重疊的視圖。框架布局常用作容器布局,因?yàn)樗话阒挥幸粋€(gè)子視圖(通常是另一個(gè)布局,用于組織多個(gè)視圖)。
技巧:事實(shí)上,你會(huì)看到框架布局是作為你設(shè)計(jì)的任何布局資源的父布局來(lái)使用的。如果你在層級(jí)視圖工具(Hierarchy Viewer tool,一個(gè)很有用的調(diào)試你的程序布局的工具)創(chuàng)建你的程序,你會(huì)發(fā)現(xiàn)你設(shè)計(jì)的任何布局資源都被顯示在一個(gè)父布局中——一個(gè)框架布局。
框架布局非常簡(jiǎn)單,這使得它們非常高效。它們可以在XML布局資源文件中定義,也可以通過(guò)Java代碼在程序中定義??蚣懿季种械囊粋€(gè)子視圖總是被繪制到相對(duì)于屏幕的左上角上。如果存在多個(gè)子視圖,那么他們被按順序一個(gè)堆疊在另一個(gè)上面的方式繪制。這意味著***個(gè)添加到框架布局的視圖將顯示在棧的底部,***添加的視圖會(huì)顯示在最頂部。
讓我們來(lái)看一個(gè)簡(jiǎn)單的例子。我們假設(shè)有一個(gè)框架布局大小調(diào)整到控制整個(gè)屏幕(換句話(huà)說(shuō),layout_width and layout_height屬性都設(shè)置為match_parent)。我們要添加三個(gè)子控件到這個(gè)框架布局:
一個(gè)有湖面圖片的ImageView。
一個(gè)在屏幕頂部顯示的TextView。
一個(gè)在屏幕底部顯示的(使用layout_gravity屬性將TextView下沉到父布局的底部)TextView。
下圖展示這種類(lèi)型的布局在屏幕上會(huì)是什么樣:
在XML資源文件中定義框架布局
設(shè)計(jì)程序用戶(hù)界面最方便和可維護(hù)的方法是創(chuàng)建XML布局資源。這個(gè)方法極大地簡(jiǎn)化了UI設(shè)計(jì)過(guò)程,將很多靜態(tài)創(chuàng)建和用戶(hù)界面控件的布局以及控件屬性的定義移到XML中去,取代了寫(xiě)代碼。
XML布局資源必須存儲(chǔ)在/res/layout項(xiàng)目目錄下。讓我們看看前一節(jié)介紹的框架布局。同樣地,這個(gè)屏幕基本上就是一個(gè)有三個(gè)子視圖的框架布局:一個(gè)充滿(mǎn)整個(gè)屏幕的圖片,兩個(gè)文本控件繪制在它上面,每一個(gè)文本控件都是默認(rèn)透明背景。這個(gè)布局資源文件命名為/res/layout/framed.xml,在XML中如下定義:
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- android:id="@+id/ImageView01"
- android:layout_height="fill_parent"
- android:layout_width="fill_parent"
- android:src="@drawable/lake"
- android:scaleType="matrix">
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:textColor="#000"
- android:textSize="40dp"
- android:text="@string/top_text" />
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/bottom_text"
- android:layout_gravity="bottom"
- android:gravity="right"
- android:textColor="#fff"
- android:textSize="50dp" />
回憶一下,在Activity中,只需要在onCreate()方法中添加一行代碼來(lái)在屏幕上加載和顯示布局資源。如果布局資源存放在/res/layout/framed.xml文件中,這行代碼應(yīng)該是:
- setContentView(R.layout.framed);
用程序定義框架布局
你也可以用程序創(chuàng)建和配置框架布局。這通過(guò)使用FrameLayout類(lèi)(android.widget.FrameLayout)來(lái)實(shí)現(xiàn)。你會(huì)在 RelativeLayout.LayoutParams類(lèi)中找到具體的參數(shù)。同樣地,典型的布局參數(shù) (android.view.ViewGroup.LayoutParams),比如layout_height和layout_width,以及邊距參數(shù)(ViewGroup.MarginLayoutParams),也能用在FrameLayout對(duì)象上。
你必須用Java創(chuàng)建屏幕內(nèi)容,然后向setContentView()方法提供一個(gè)包含所有要作為子視圖顯示的控件內(nèi)容的父布局對(duì)象,而不是像前面所示直接使用setContentView()方法來(lái)加載布局資源。在這里,你的父布局就是框架布局。例如,下面的代碼示例了如何用程序重新創(chuàng)建前面描述的相同的布局。特別地,我們?cè)诨顒?dòng)中實(shí)例化一個(gè)FrameLayout,并在它的onCreate()方法中先添加一個(gè)ImageView控件然后再添加兩個(gè)TextView控件:
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- TextView tv1 = new TextView(this);
- tv1.setText(R.string.top_text);
- tv1.setTextSize(40);
- tv1.setTextColor(Color.BLACK);
- TextView tv2 = new TextView(this);
- tv2.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, Gravity.BOTTOM));
- tv2.setTextSize(50);
- tv2.setGravity(Gravity.RIGHT);
- tv2.setText(R.string.bottom_text);
- tv2.setTextColor(Color.WHITE);
- ImageView iv1 = new ImageView(this);
- iv1.setImageResource(R.drawable.lake);
- iv1.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
- iv1.setScaleType(ScaleType.MATRIX);
- FrameLayout fl = new FrameLayout(this);
- fl.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
- fl.addView(iv1);
- fl.addView(tv1);
- fl.addView(tv2);
- setContentView(fl);
- }
最終屏幕運(yùn)行結(jié)果和前面圖片展示的一模一樣。
何時(shí)使用框架布局
當(dāng)你可以自由使用其它強(qiáng)大布局類(lèi)型,如線(xiàn)性布局,相對(duì)布局和表格布局時(shí),很容易會(huì)忘了框架布局。框架布局的效率使得它是包含很少視圖控件的屏幕的很好的選擇(主屏幕,只有一個(gè)畫(huà)布的游戲界面等)。有些時(shí)候其它低效的布局設(shè)計(jì)可以簡(jiǎn)化為一個(gè)更有效率的框架布局設(shè)計(jì),而其它時(shí)候使用更專(zhuān)業(yè)的布局類(lèi)型會(huì)更合適。當(dāng)你想要堆疊視圖時(shí)框架布局是一般的選擇。
看看類(lèi)似的控件
FrameLayout相對(duì)比較簡(jiǎn)單。因?yàn)檫@一點(diǎn),很多其它布局類(lèi)型和視圖控件都是基于它的。例如,ScrollView就是一個(gè)在子內(nèi)容太大而不能在布局界限內(nèi)完全展示時(shí)出現(xiàn)滾動(dòng)條的框架布局。所有主屏幕(Home屏幕)應(yīng)用小工具都位于一個(gè)框架布局中。
對(duì)于所有框架布局需要注意的是它們除了通常的背景以外還可以設(shè)置前景色。這通過(guò)android:foreground XML屬性來(lái)實(shí)現(xiàn)。這也可以用于框架下面的視圖。
總結(jié)
Android程序Android程序用戶(hù)界面使用布局來(lái)定義,框架布局是最簡(jiǎn)單和***效的布局類(lèi)型之一。框架布局的子控件被相對(duì)于布局的左上角來(lái)繪制。如果框架布局中存在多個(gè)子視圖,它們將按順序繪制,***一個(gè)子控件繪制在最上面。
原文出處
本文標(biāo)題:Android用戶(hù)界面設(shè)計(jì):框架布局
文章URL:http://m.fisionsoft.com.cn/article/djsihod.html


咨詢(xún)
建站咨詢(xún)
