[android淺析]android程式介面編程與視圖(View)組件

來源:互聯網
上載者:User

android應用開發一個主要內容就是介面開發。隨著行動裝置的不斷普及,android應用幾乎無處不在,設計到各個領域。對於使用者來說,除了看重一個應用的功能外,圖形介面也是最關注的對象。如果一個應用沒有提供友好的圖形介面,那麼將很難吸引最終的使用者;相反,如果為應用程式提供一個友好的圖形介面(GUI),那麼使用者可以輕鬆的通過手指去點擊各種事件愛你,來操作這個應用程式,使用者就會感覺到”很爽“。就像windows系統一樣,最初能很快吸引大量使用者,就是因為它有豐富的圖形介面,才幾乎獨佔整個市場。可想而知,友好的圖形介面是多麼的重要。

對於程式員來說,除了要開發出友好的圖形介面,還好去思考用什麼方式去實現比較好。android提供了大量功能豐富的UI組件,這些組件功能都具有一定的規律且具有很多相似之處,程式開發人員只需要掌握這些規律,就可以實現出漂亮、友好的圖形介面了。在接下的一段時間裡,將會陸續介紹。今天我們就先介紹一下介面編程與視圖組件之間的聯絡吧!

1、視圖組件與容器組件

在一個activity檔案中,我們會看到很多包:

 

import android.widget.EditText;import android.widget.ImageButton;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.PopupWindow;import android.widget.RadioButton;import android.widget.RadioGroup;import android.widget.RelativeLayout;import android.widget.SeekBar;import android.widget.CompoundButton.OnCheckedChangeListener;import android.widget.SeekBar.OnSeekBarChangeListener;import android.widget.TextView;import android.widget.Toast;import android.widget.ViewSwitcher;

android應用的絕大多數UI組件都是放在android.widget包中以及其子包中、android.view包中以及其子包中。值得注意的是,android中所有的組件都是繼承了View類。View類是一個非常重要的類,其還有一個子類ViewGroup,但是ViewGoup類經常作為其他組件的容器使用。

還有一點值得說明的就是View與ViewGoup類之間的關係,View類包含ViewGoup類,同時ViewGoup類中也包含View類:

那麼在android項目中我們如何去實現介面開發呢?一般情況下,我們可以採用兩種方式來實現:

(1)、在XML布局檔案中通過XML屬性進行控制,一般推薦使用這種方式。

(2)、在Java程式碼中通過調用方法進行控制。

無論是哪一種實現方式,其實他們的本質都是一樣的。在XML檔案中實現UI組件,我們要是添加UI組件相應的XML屬性;在java代碼中實現UI組件,我們通過相應的屬性方式來控制組件的屬性,也就是說,其實每一個UI組件的XML屬性都會對應一個方法。UI組件的屬性包括View類常用的XML屬性及相關方法和ViewGoup類中常用的XML方法。

對View類來說,他們是所有UI組件的基類,因此它包含的XML屬性都會對應一個方法。常用的有:

 

XML屬性 相關方法 說明
android:alpha setAlpha(float) 設定組件的透明度
android:background setBackGroundResource(int) 設定組建的背景顏色
android:id setId(int) 設定組件的唯一標識
android:keepScreenOn setKeepSCreenOn(int) 設定該組件是否強制手機螢幕一直開啟
android:visibility setVilibility(int) 設定組件是否可見

ViewGroup類繼承了View類,因此也是可以當成一個普通的View類來使用的。但是,ViewGroup類主要是當成容器類來使用。又由於ViewGroup類是一個抽象類別,因此在使用中,通常使用它的一些子類來作為容器,例如各種布局管理器。ViewGroup容器控制其子組件的分布依次是Viewgroup.LayoutParams、ViewGroup.MarginLayoutParams兩個內部類。這兩個內部類中都提供了一些XML屬性,ViewGroup容器中的子組件可以指定這些XML屬性。 Viewgroup.LayoutParams支援兩個XML屬性:
XML屬性 說明
android:layout_height 指定該子組件布局的高度
android:layout_width 指定該子組件布局的寬度
在XML布局檔案中這樣使用:
android:layout_width="fill_parent"android:layout_height="wrap_content"
android:layout_height、android:layout_width兩個屬性的值有三種: (1)、fill_parent:指定子組件的高度、寬度和父容器的高度、寬度相同(實際上還要減去填充的空白距離)。 (2)、match_parent:該屬性和fill_parent完全相同,但是在android2.2版本以後推薦使用這個。 (3)、wrap_parent:指定組件的大小恰好能包裹它裡面的內容。

另外ViewGroup.MarginLayoutParams支援四個XML屬性:

 

 

XML屬性 相關方法 說明
android:layout_marginBottom setMargins(int,int,int,int) 指定子組件下邊的頁面邊界
android:layout_marginLeft setMargins(int,int,int,int) 指定子組件左邊的頁面邊界
android:layout_marginRight setMargins(int,int,int,int) 指定子組件右邊的頁面邊界
android:layout_marginTop setMargins(int,int,int,int) 指定子組件上邊的頁面邊界

 

在XML布局檔案中這樣使用:

 

android:layout_marginTop="10dp" android:layout_marginLeft="10dp"android:layout_marginRight="10dp"android:layout_marginBottom="10dp"

當然了組件的屬性遠不止這些,還有很多,以上列舉的只是常用的幾個而已!

2、使用XML布局檔案來控制UI介面

 

android中常用和推薦使用的就是這種實現方式,它具有簡單、方便、清晰的特點,而且可以將應用的視圖控制邏輯從java代碼中分離出來,放入到XML檔案進行控制,很好的提現了MVC原則。在之前我們也說了在XML檔案實現組件的方法,,下面再簡單介紹一下:

(1)在XML檔案中設定布局組件:

例如我實現一個Text控制項:

 


 

 

接下來我們就需要在Activity中先找到這個布局檔案:

 

setContentView(R.layout.main);
接下來就是去訪問這個組件,需要綁定她的ID,這樣才知道要訪問的組件是哪一個:

 

 

private Text showText;
showText = (Text) findViewById(R.id.show_helloworld);
一旦擷取指定的UI組件之後,就可以通過代碼控制這個組件的屬性以及UI組件綁定的監聽事件。

 

(2)在代碼中控制UI介面

雖然android中推薦使用XML檔案來控制組件,如果開發人員需要也可以在java代碼 中去實現控制一個組件,可以完全拋棄XML檔案的限制。

下面我們就接上上面的實現,假設上面的主介面是通過XML檔案來實現的,下面我們通過點擊Text控制項,來調到另一個Activity頁面,這個Activity頁面是通過java代碼來實現的。

建立一個JavaActivity類,添加代碼:

 

//建立一個線性布局管理器LinearLayout layout = new LinearLayout(this);//設定anctivity顯示layoutsuper.setContentView(layout);layout.setOrientation(LinearLayout.VERTICAL);//建立一個TextViewfinal TextView textView = new TextView(this);textView.setText("我是通過java代碼實現的……");layout.addView(textView);

在MainActivity類中調用:

 

 

showText = (Button) findViewById(R.id.show_helloworld);showText.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubIntent intent = new Intent(MainActivity.this,JavaActivity.class);startActivity(intent);}});

效果

 


從上面的代碼我們可以看到,javaactivity類中的組件是通過new關鍵字建立的,然後程式使用LineLayout容器來“存放”這些組件,這樣就組成了圖形使用者。

在很多情況下我們都要傳一個參數this,這是為什麼呢?這是因為由於建立UI組件時傳入了一個Content參數,Content代表訪問android應用環境的全域資訊的API。讓UI組件持有一個Content參數,可以讓這些UI組件通過該Content參數擷取android應用環境的全域資訊。Content本身是一個抽象類別,android的應用組件如Activity、server都是繼承了Content,因此Activity、Server都可以直接作為Content使用。

除了上面兩種實現控制UI組件,我們一般還可以將兩種方式結合使用,這樣就可以更加靈活的開發了,這個就不說了!大家可以自己動手嘗試,建立一個新項目,親身體會一下!

好了,今天我們要將的就結束了大家感覺是不是很簡單,看再多的次數,不如親手敲一下代碼,=這樣才能發現更多的問題,才能思考的更深。下次我們將繼續介紹新的知識-android四大基本布局+新增布局,歡迎大家繼續關注,我們一起交流、一起進步……







 


 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.