日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀] 這個章節(jié)描述怎么實現(xiàn)一個基本的Android界面。它涉及構建屏幕基本元素,怎么在xml(定義文件)內定義屏幕、用你的代碼生成、在不同任務你需要操作你的用戶接口。Android生成

 這個章節(jié)描述怎么實現(xiàn)一個基本的Android界面。它涉及構建屏幕基本元素,怎么在xml(定義文件)內定義屏幕、用你的代碼生成、在不同任務你需要操作你的用戶接口。Android生成屏幕有三種方式:xml配置生成;通過你自己用戶界面接口生成;直接用代碼生成。根據(jù)MVC原則,UI應該與程序邏輯相分離,因此,在XML中定義UI結構是高度推薦的。此外,一個程序從一個屏幕方案調整到另一個也容易得多。在XML中定義UI跟創(chuàng)建一個普通的HTML文檔非常相似,例如,你有如下的一個文件:

 

 

 

 

 

The content of the body element.

 

 

就如Android的XML布局一樣,所有的元素都是結構化的,能夠通過樹形結構來表示:

 

xmlns:android=http://schemas.android.com/apk/res/android

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

 

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Hello World"/>

 

3.2.1屏幕元素的層次

Android應用程序的基礎功能單元就是Activity--android.app.Activity類中的一個對象。一個Activity可以做很多事,但是他自己并不會顯示到屏幕上。想要讓你的Activity顯示在屏幕上并且設計它的UI,你需要使用view和viewgroup--Android平臺基礎的用戶界面表達單元。

Views

一個view是一個android.view.View基礎類的對象。它是一個存儲有屏幕上特定的一個矩形內布局和內容屬性的數(shù)據(jù)結構。一個View對象處理測距和布局,繪圖,焦點變換,滾動條,還有屏幕區(qū)域自己表現(xiàn)的按鍵和手勢。

View類作為一個基類,為widget(窗體部件)服務,widget--是一組用于繪制交互屏幕元素的完全實現(xiàn)子類。Widget處理它們自己的測距和繪圖,所以你可以更快速地用它們去構建你的UI。可用到的widget包括Text,EditText,InputMethod,Button,RadioButton,Checkbox,和ScrollView……。

Viewgroups

一個ViewGroup是一個android.view.Viewgroup類的對象。正如同它的名字表明的一樣,一個viewgroup是一個特殊的view對象,它的功能是去裝載和管理一組下層的view和其他viewgroup,Viewgroup讓你可以為你的UI增加結構并且將復雜的屏幕元素構建成一個獨立的實體。

Viewgroup類作為一個基類為layout(布局)服務,layout--是一組提供屏幕界面通用類型的完全實現(xiàn)子類。layout讓你可以為一組view構建一個結構。

一個樹形結構的界面

在Android平臺上,你用view樹和viewgroup節(jié)點來定義一個Activity的UI,就如同下面圖表一樣。這個樹可以如你需要那樣簡單或者復雜,并且你可以使用Android的預定義widget和layout或者你自定義的view類型來構建它。

一個view和viewgroup樹的樣例:

Picture 4 Android UI - Tree structure

要將屏幕綁定一個樹以便于渲染,你的Activity調用它的setContentView()方法并且傳遞一個參數(shù)給根節(jié)點對象。一旦Android系統(tǒng)獲得了根節(jié)點的參數(shù),它就可以直接通過節(jié)點來無效化,測距和繪制樹。當你的Activity被激活并且獲得焦點時,系統(tǒng)會通知你的activity并且請求根節(jié)點去測距并繪制樹,根節(jié)點就會請求它的子節(jié)點去繪制它們自己,同時,每個樹上的viewgroup節(jié)點負責繪制它的直接子節(jié)點。

正如之前提到的,每個view group都有測量它的有效空間,布局它的子對象,并且調用每個子對象的Draw()方法去繪制它們自己。子對象可能會請求獲得一個它們在父對象中的大小和位置,但是父對象對于每個子對象的大小和位置有最終的決定權。

LayoutParams:一個子對象如何指定它的位置和大小

每個viewgroup類都會使用一個繼承于Viewgroup.LayoutParams的嵌套類。這個子類包含了一系列的屬性類型,這些屬性類型定義一個子對象位置和大小,與view group類相適應。

layoutparams的一個樣例:

要注意的是,每個LayoutParams子類都有它自己賦值的語法。每個子元素必須定義適用于它們父對象的LayoutParams,盡管父對象可能會為子元素定義不同的LayoutParams。

所有的viewgroup都包括寬和高。很多還包括邊界的定義(margin和border)。你可以非常精確地描述寬和高,盡管你并不想經常這么做。更多時候你希望你的view自行調整到適應內容大小,或者適應容器大小。

Android 界面元素與Swing界面元素的比較

Android 界面元素[!--empirenews.page--]

Swing 界面元素

Activities

Frame

Views

Components

TextViews

Labels[!--empirenews.page--]

EditTexts

TextFields

Buttons

Buttons

Android和Swing的監(jiān)聽者設置也幾乎一樣:

3.2.2 通用布局對象

下面為在你的應用中為最普遍的view groups。這里介紹每種類型的一些基本信息;更深入的細節(jié),請看每章前面的鏈接參考頁。

FrameLayout

FrameLayout是最簡單的一個布局對象。它被定制為你屏幕上的一個空白備用區(qū)域,之后你可以在其中填充一個單一對象 — 比如,一張你要發(fā)布的圖片。所有的子元素將會固定在屏幕的左上角;你不能為FrameLayout中的一個子元素指定一個位置。后一個子元素將會直接在前一個子元素之上進行覆蓋填充,把它們部份或全部擋住(除非后一個子元素是透明的)。

LinearLayout

LinearLayout以你為它設置的垂直或水平的屬性值,來排列所有的子元素。所有的子元素都被堆放在其它元素之后,因此一個垂直列表的每一行只會有一個元素,而不管他們有多寬,而一個水平列表將會只有一個行高(高度為最高子元素的高度加上邊框高度)。LinearLayout保持子元素之間的間隔以及互相對齊(相對一個元素的右對齊、中間對齊或者左對齊)。

LinearLayout還支持為單獨的子元素指定weight。好處就是允許子元素可以填充屏幕上的剩余空間。這也避免了在一個大屏幕中,一串小對象擠成一堆的情況,而是允許他們放大填充空白。子元素指定一個weight值,剩余的空間就會按這些子元素指定的weight比例分配給這些子元素。默認的weight值為0。例如,如果有三個文本框,其中兩個指定了weight值為1,那么,這兩個文本框將等比例地放大,并填滿剩余的空間,而第三個文本框不會放大。

下面的兩個窗體采用LinearLayout,包含一組的元素:一個按鈕,幾個標簽,幾個文本框。兩個窗體都為布局做了一番修飾。文本框的width被設置為FILL_PARENT;其它元素的width被設置為WRAP_CONTENT。默認的對齊方式為左對齊。左邊的窗體沒有設置weight(默認為0);右邊的窗體的comments文本框weight被設置為1。如果Name文本框也被設置為1,那么Name和Comments這兩個文本框將會有同樣的高度。

在一個水平排列的LinearLayout中,各項按他們的文本基線進行排列(第一列第一行的元素,即最上或最左,被設定為參考基線)。因此,人們在一個窗體中檢索元素時,就不需要七上八下地讀元素的文本了。我們可以在layout的XML中設置android:baselineAligned="false",來關閉這個設置。[!--empirenews.page--]

TableLayout

TableLayout將子元素的位置分配到行或列中。android的一個TableLayout由許多的TableRow組成,每個TableRow都會定義一個row(事實上,你可以定義其它的子對象,這在下面會解釋到)。TableLayout容器不會顯示row、cloumns或cell的邊框線。每個row擁有0個或多個的cell;每個cell擁有一個View對象。表格由列和行組成許多的單元格。表格允許單元格為空。單元格不能跨列,這與HTML中的不一樣。下圖顯示了一個TableLayout,圖中的虛線代表不可視的單元格邊框。


列可以被隱藏,也可以被設置為伸展的從而填充可利用的屏幕空間,也可以被設置為強制列收縮直到表格匹配屏幕大小。對于更詳細信息,可以查看這個類的參考文檔。

AbsoluteLayout

AbsoluteLayout可以讓子元素指定準確的x/y坐標值,并顯示在屏幕上。(0, 0)為左上角,當向下或向右移動時,坐標值將變大。AbsoluteLayout沒有頁邊框,允許元素之間互相重疊(盡管不推薦)。我們通常不推薦使用AbsoluteLayout,除非你有正當理由要使用它,因為它使界面代碼太過剛性,以至于在不同的設備上可能不能很好地工作。

RelativeLayout

RelativeLayout[!--empirenews.page--]允許子元素指定他們相對于其它元素或父元素的位置(通過ID指定)。因此,你可以以右對齊,或上下,或置于屏幕中央的形式來排列兩個元素。元素按順序排列,因此如果第一個元素在屏幕的中央,那么相對于這個元素的其它元素將以屏幕中央的相對位置來排列。如果使用XML來指定這個layout,在你定義它之前,被關聯(lián)的元素必須定義。

這是一個RelativeLayout例子,其中有可視的和不可視的元素?;A的屏幕layout對象是一個RelativeLayout對象。

這個視圖顯示了屏幕元素的類名稱,下面是每個元素的屬性列表。這些屬性一部份是由元素直接提供,另一部份是由容器的LayoutParams成員(RelativeLayout的子類)提供。RelativeLayout參數(shù)有width,height,below,alignTop,toLeft,padding和marginLeft。注意,這些參數(shù)中的一部份,其值是相對于其它子元素而言的,所以才RelativeLayout。這些參數(shù)包括toLeft,alignTop和below,用來指定相對于其它元素的左,上和下的位置。

Summary of Important View Groups

重要View Group摘要

These objects all hold child UI elements. Some provide visible UI, and others only handle child layout.

這些對象擁有UI子元素。一些提供可視的UI,另一些只處理子元素的布局。 [!--empirenews.page--]

 

Class

Description

AbsoluteLayout

可以通過精確的坐標(如屏幕像素)指定子對象相對父容器的位置

FrameLayout[!--empirenews.page--]

負責顯示單一對象的Layout

Gallery

一個以水平滾動方式顯示有序圖片列表的顯示器

GridView

顯示一個可滾動的有m列n行的表格 [!--empirenews.page--]

LinearLayout

以水平或垂直方式顯示子元素的Layout。如果窗體的長度超過了屏幕的長度,將會出現(xiàn)滾動條

ListView

顯示一個可滾動的單列列表

PopupList [!--empirenews.page--]

一個獨立的帶邊框的元素彈出列表

RelativeLayout

能夠指定子對象相對于其它對象(如A在B的左邊)或父對象(如在父容器的頂部)的位置

ScrollView

一個垂直的元素滾動列 [!--empirenews.page--]

Spinner

在一個單行文本框中,同時只顯示一個有序列表中的一個項。類似于一個可以水平或垂直滾動的單行l(wèi)istbox

SurfaceView

提供直接訪問一個可畫圖的界面??梢钥刂圃诮缑骓敳康淖右晥D層。SurfaceView是提供給需要直接畫像素而不是使用窗體部件的應用使用的。

TabHost[!--empirenews.page--]

提供一個頁簽選擇列表,監(jiān)視點擊并在一個頁簽被點擊時保證應用切換屏幕。

TableLayout

一個擁有任意行和列的表格layout,每一個單元格擁有窗體部份。行會根據(jù)最大的列而自動調整大小。單元格邊框不可見。

ViewFlipper

一個在單行文本框中同一時刻只顯示一項的列表組件。它可以根據(jù)時間周期切換顯示項,類似一個幻燈機。 [!--empirenews.page--]

ViewSwitcher

類似ViewFlipper

 

3.2.3數(shù)據(jù)綁定

有些View groups會有UI。這些對象通常是AdapterView類的子類.例如包括圖庫和列表視圖, 它們具有兩個共同的職責:

· 填充布局數(shù)據(jù) [!--empirenews.page--]

· 處理用戶操作

填充布局數(shù)據(jù)

填充布局數(shù)據(jù)通常通過把這個類綁定到一個Adapter來完成,Adapter從某個地方獲取它的數(shù)據(jù),或者是代碼提供的一個列表,或者是來自設備數(shù)據(jù)庫的查詢結果。

// Get a Spinner and bind it to an ArrayAdapter that

// references a String array.

Spinner s1 = (Spinner) findViewById(R.id.spinner1);

ArrayAdapter adapter = ArrayAdapter.createFromResource([!--empirenews.page--]

this, R.array.colors, android.R.layout.simple_spinner_item);

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

s1.setAdapter(adapter);

// Load a Spinner and bind it to a data query.

private static String[] PROJECTION = new String[] {

People._ID, People.NAME

};

Spinner s2 = (Spinner) findViewById(R.id.spinner2);

Cursor cur = managedQuery(People.CONTENT_URI, PROJECTION, null, null);

[!--empirenews.page--]

SimpleCursorAdapter adapter2 = new SimpleCursorAdapter(this,

android.R.layout.simple_spinner_item, // Use a template

// that displays a

// text view

cur, // Give the cursor to the list adatper

new String[] {People.NAME}, // Map the NAME column in the

// people database to...

new int[] {android.R.id.text1}); // The "text1" view defined in

// the XML template

[!--empirenews.page--]

adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

s2.setAdapter(adapter2);

注意:使用CursorAdapter時,必須有People._ID, 否則將會發(fā)生異常。

處理用戶操作

Android通過設置類的AdapterView.OnItemClickListener 成員到一個監(jiān)聽者并捕捉用戶的操作事件,來處理用戶的操作。

// Create a message handling object as an anonymous class.[!--empirenews.page--]

private OnItemClickListener mMessageClickedHandler = new OnItemClickListener() {

public void onItemClick(AdapterView parent, View v, int position, long id)

{

// Display a messagebox.

showAlert("You‘ve got an event", "Clicked me!", "ok", false);

}

};

// Now hook into our object and set its onItemClickListener member

// to our class handler object.

mHistoryView = (ListView)findViewById(R.id.accept_button);[!--empirenews.page--]

mHistoryView.setOnItemClickListener(mMessageClickedHandler);

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據(jù)LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉