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

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顯示layout
super.setContentView(layout);
layout.setOrientation(LinearLayout.VERTICAL);
//創建一個TextView
final TextView textView = new TextView(this);
textView.setText("我是通過java代碼實現的……");
layout.addView(textView);

在MainActivity類中調用:

 

 

showText = (Button) findViewById(R.id.show_helloworld);
showText.setOnClickListener(new OnClickListener() {
			
@Override
public void onClick(View arg0) {
	// TODO Auto-generated method stub
	Intent 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四大基本佈局+新增佈局,歡迎大傢繼續關註,我們一起交流、一起進步……

 

 

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *