Android學習筆記(六):xml和widget

排版java

若是在一個layout中有幾個widget,最後一個widget採用fill_parent,這將填滿剩餘的空間。若是某一個widget(非最後一個)採用fill_parent,則後面的widget將沒法顯示。從某個意義上fill_parent能夠理解爲父layout剩餘的全部空間。android

Eclipse中的提示功能git

咱們在使用eclipse時候,在編譯XML,會自動由提示,可能會由於咱們按了一下鼠標或者其餘方式,提示消失,能夠採用Atl+/的方式,啓動提示。api

TextView(Label)eclipse

在Andriod裏面是textview,在XML裏面有下的一些屬性ide

android:typeface       字體monospace
android:textStyle       bold italic bold|italic
android:textColor      #FF0000,red
android:textSize        例如"25px",在尺寸方式,有時咱們使用px,有時使用dip。px指的像素,dip指的是一種基於屏幕密度的抽象單位。在每英寸160點的顯示器上,1dp = 1px,採用dip,咱們能夠無須考慮像素是否密集,而獲取咱們期待的大小,所以推薦使用dip。
android:gravity          內容的位子,center,left,right等等
android:background 背景色,採用RGB方式
android:singleLine    值爲flase或者ture,若是false這容許多行。函數

Button學習

這是TextView的subclass,Lable的全部,也適用於Button。在Andriod學習筆記(四):不使用IDE採用命令行中咱們給出了一個按鍵出發的例子,利用XML,能夠更爲簡單。字體

  <Button  
      android:id="@+id/myButton" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:onClick="buttonClickAction" <!-- 格式爲andriod:onClick="method_name"-->
      />this

在java source code中,咱們在類中無須implement interface,能夠直接在public void <method_name>(View v)這樣處理。以下:

......
import android.view.View;

public class Activity01 extends Activity
{
    public void buttonClickAction(View button){
        ... ... 
    }
}

ImageView和ImageButton

這個對應的是TextView和Button,只不過是Image,下面是一個ImageView的例子:

  <ImageView
      android:id="@+id/mylanscape"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:adjustViewBounds="true"
      android:src="@drawable/hdrlandscape" <!--這裏是圖片的來源,也能夠經過setImageURI()指定URI,咱們在res/drawable-hdpi中放置了一個圖片hdrlandscape.jpg,經過android:src可實現加載-->
      /> 

EditText

下面是一個例子:

   <EditText
      android:id="@+id/myfield"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:singleLine="false" <!-- 這裏表示多行-->
 <!--    android:autoText 自動進行拼寫檢驗
          addroid:capitalize 單詞中第一個字母自動爲大寫,這對於名詞,城市的EditText頗有幫助
          andriod:digits 只容許數字-->
      />   

CheckBox

CheckBox和RadioBox都是從CompoundButton中繼承的,而CompoundButton是繼承TextView。在XML中以下定義:

  <CheckBox
      android:id="@+id/mycheckbox"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="This checkbox is:uncheck"
      />

經常使用的checkcbox函數有:isChecked(),setChecked(),toggle()(改變狀態,如是checked的變成unchecked,若是是unchecked變爲checked。)。若是CheckBox的狀態發生更改,須要在程序中進行觸發方法處理。以下:

public class HelloAndriod extends Activity implements CompoundButton.OnCheckedChangeListener{

    private CheckBox mycheckbox = null;
    
    @Override
    public void onCreate(Bundle savedInstanceState){
        ... ...
        mycheckbox = (CheckBox)findViewById(R.id.mycheckbox);
        mycheckbox.setOnCheckedChangeListener(this);
    }
    
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){
           mycheckbox.setText("This checkbox is : " + (isChecked ? "checked":"unchcked"));
    }
}

RadioBox

RadioBox處理外觀上於CheckBox不同外,RadioBox一般會組成一個Group,在Group中只能有一個RadioBox處於checked狀態。在XML中以下處理:

  <RadioGroup
      android:id="@+id/myradiogroup"
      android:orientation="vertical"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content" >
        <RadioButton android:id="@+id/radio1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text ="Radio Text One" />
        <RadioButton android:id="@+id/radio2"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text ="Radio Text Two" />
        <RadioButton android:id="@+id/radio3"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text ="Radio Text Three" />
  </RadioGroup>

咱們更常操做RadioGroup,常見的方法包括有check(),例如roup.check(R.id.radio1)),將R.id.radio1對應的radiobutton選上;clearCheck(),清楚全部的選擇,所有都是unchecked;getCheckedRadioButtonId(),獲取選上的radiobutton的ID,無則返回-1。在下面的例子中,咱們在以前的checkbox的例子上增長radiobox

public class HelloAndriod extends Activity  implements CompoundButton.OnCheckedChangeListener, RadioGroup.OnCheckedChangeListener{
    private RadioGroup myradiogroup = null;
    
    public void onCreate(Bundle savedInstanceState){
        ... ...
        myradiogroup = (RadioGroup)findViewById(R.id.myradiogroup);
        myradiogroup.setOnCheckedChangeListener(this);
    }
    
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){
           mycheckbox.setText("This checkbox is : " + (isChecked ? "checked":"unchcked"));
    }

    public void onCheckedChanged(RadioGroup  group, int checkedId){
           int radioId = myradiogroup.getCheckedRadioButtonId();
           if(radioId < 0 )
               myTextView.setText("No Radio Button is selected");
           else{
               RadioButton rb = (RadioButton)group.findViewById(radioId);
               myTextView.setText("radio button: " + rb.getText());
           }
     }
}

View

上面的widget都是View,能夠在XML中使用View的特性。

例如:android:visibility="invisible",這使得widget不可見,可是保留其所佔的位置,若是是"gone",則不保留位置。

和顏色相關的android:background,能夠是具體的顏色,例如android:background="#0000ff",也能夠是圖片,例如android:background="@drawable/hdrlandscape",可是圖片的話,ckeckbox的佔用位置需考慮圖片的大小。TextView以及其繼承類可使用android:textColor="#00ff00"來指定文本的顏色,處此以外,還能夠採用ColorStateList的方式來設定不一樣狀況下text的顏色。

咱們在res/layout/目錄下新增一個Android XML文件button_color.xml對咱們上面的button在不一樣狀態下的顏色進行描述:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#00ff00" android:state_focused="true"/>
    <item android:color="#ff0000" android:state_pressed="true" />
    <item android:color="#0000ff" android:state_pressed="false" />
</selector>

這些選擇從上至下是具備優先級別的,例如咱們將state_focused放置在最後,並不起做用,由於會先執行了state_pressed="false"的顏色。相關的狀態有state_pressed, button_color, state_focused, state_selected, state_active, state_checkable, state_checked, state_enabled, state_window_focused。

而後咱們main.xml,對相關的widget,增長:android:textColor="@layout/button_color"

因爲繼承View,可使用View的方法,與UI相關的:setEnabled(), isEnabled(),requestFocus(),isFocused

在容器中獲取widget中實例相關的有:getParent()-得到父容器或者父widget,findViewById(),getRootView(),這些在XML中都很好理解。

相關連接: 個人Android開發相關文章

相關文章
相關標籤/搜索