Home » Android 程式片段

[Android]基本的 Widget 元件介紹 (二)

RadioButton
單選元件若要真的能產生單選作用的話,除了自己用程式去控制之外,建議是把它們放在 RadioGroup 元件中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
...以上省略
<RadioGroup
	android:id="@+id/sex"
	android:layout_width="300px"
	android:layout_height="wrap_content"
	android:orientation="horizontal"
	android:checkedButton="@+id/sex1"
	>
	<RadioButton 
		android:text="男" 
		android:id="@+id/sex1" 
		android:layout_width="wrap_content" 
		android:layout_height="wrap_content"
		/>
	<RadioButton 
		android:text="女" 
		android:id="@+id/sex2" 
		android:layout_width="wrap_content" 
		android:layout_height="wrap_content"
		/>
	</RadioGroup>
<Button
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	android:text="點選的是..."
	android:id="@+id/btn"
	/>
<TextView 
	android:text="" 
	android:id="@+id/result" 
	android:layout_width="wrap_content" 
	android:layout_height="wrap_content"
	/>
...以下省略

我們能透過 RadioGroupcheckedButton 來預設那個是先點選的。也可以透過 isChecked() 來判斷是否點選;而用 setChecked() 來設定點選的狀態:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.TextView;
 
public class main extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
		final Button btn = (Button)findViewById(R.id.btn);
		btn.setOnClickListener(new OnClickListener(){
 
			@Override
			public void onClick(View arg0) {
				RadioButton sex1 = (RadioButton)findViewById(R.id.sex1);
				TextView txt = (TextView)findViewById(R.id.result);
 
				if(sex1.isChecked()){
					txt.setText("你選擇的是男");
				}else{
					txt.setText("你選擇的就一定是女囉");
				}
			}
		});
    }
}



EditText
文字輸入元素最基本的功能就是提供使用者輸入使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
...以上省略
<EditText 
	android:id="@+id/username" 
	android:layout_width="fill_parent" 
	android:layout_height="wrap_content"
	android:layout_marginTop="20px"
	/>
<EditText  
	android:id="@+id/pwd" 
	android:layout_width="fill_parent" 
	android:layout_height="wrap_content"
	android:password="true"
	/>
...以下省略

因為一開始有設定 password 的關係,所以等一下會看到這兩個輸入後的差別:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;
 
public class main extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        final EditText nameEdit = (EditText)findViewById(R.id.username);
        nameEdit.setText("abgne.tw");
 
        final EditText pwdEdit = (EditText)findViewById(R.id.pwd);
        pwdEdit.setText("abgne.tw");
    }
}


ImageButton
有別於 Button 的單調樣式,ImageButton 可加入各種背景圖片來當按鈕的圖示:

1
2
3
4
5
6
7
8
...以上省略
<ImageButton 
	android:id="@+id/ImageButton01" 
	android:layout_width="wrap_content" 
	android:layout_height="wrap_content"
	android:src="@drawable/calling_assist"
	/>
...以下省略

我們可透過 OnFocusChangeListener 來偵聽取得焦點的事件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.widget.ImageButton;
 
public class main extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        final ImageButton imgBtn = (ImageButton)findViewById(R.id.ImageButton01);
        imgBtn.setOnFocusChangeListener(new OnFocusChangeListener(){
 
			@Override
			public void onFocusChange(View v, boolean hasFocus) {
				// 當 ImageButton 取得焦點時
				if(hasFocus){
					imgBtn.setImageResource(R.drawable.ninja_android);
				}else{
					imgBtn.setImageResource(R.drawable.calling_assist);
				}
			}
 
        });
    }
}

只有當用 Trackball 來取得焦點時才會觸發事件喔!若是要做到點擊觸發的話,則要偵聽 OnClickListener

5 筆針對 [Android]基本的 Widget 元件介紹 (二) 的迴響

  1. 想請問一下
    在宣告物件的時候存取修飾子 final 跟 private 有什麼差別!?

    宣告成final是不能被改變
    private是同一類別下可以去呼叫
    因為我習慣用private

    • 看你的需求來用哩..
      final 表示此變數值只能設定一次, 若用在 class 則無法被繼承
      若在搭配 static 的話, 就變成是常數囉~

  2. 恩恩 那我瞭解了
    因為我看過幾本書有的會宣告private有的宣告public
    但實際使用上好像沒什麼差別
    所以有這個疑問

發表迴響