Android开发 - 惯用控件

Android开发 - 常用控件

back>>

1. TextView

    * 用来显示文本的标签,类似SWT中的Label。在layout的main.xml布局文件中添加TextView组件

<TextView  
	android:id="@+id/myTextView02"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />

     * 在Java代码中得到该Textview

		TextView myTextView = (TextView) findViewById(R.id.myTextView02);
		myTextView.setText(String.valueOf(result));

 

2. EditText

    * 在布局文件中添加EditText组件

<EditText
	android:id="@+id/factorOne"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
/>

     * 在Java代码中操作该组件

		EditText factorOne = (EditText) findViewById(R.id.factorOne);
		String factorOneStr = factorOne.getText().toString();

 

3. Button

    * 在布局文件中添加Button组件

<Button 
	android:id="@+id/calcaulate"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
/>

    * 在Java代码中操作该组件

			Button calculate = (Button) findViewById(R.id.calcaulate);
			calculate.setText(R.string.calculate);

			//设置监听器。 listener利用了Observer的设计模式
			calculate.setOnClickListener(new CalculateListener());
。。。。
	// 内部类可以使用外部类的成员变量和函数
	// 内部类的学习
	class CalculateListener implements OnClickListener {

		public void onClick(View v) {
			/*
			 * 乘法 1.取两个EditText控件的值 2.将这两个值放到intent对象中
			 * 3.使用这个Intent对象启动Activity02
			 */
			String factorOneStr = factorOne.getText().toString();
			String factorTwoStr = factorTwo.getText().toString();

			Intent intent = new Intent();
			intent.putExtra("one", factorOneStr);
			intent.putExtra("two", factorTwoStr);

			intent.setClass(Activity01.this, Activity02.class);
			Activity01.this.startActivity(intent);

		}

	}

 

4. Menu

    * Menu控件不需要配置到布局文件中,当点击menu按钮时,会调用onCreateOptionsMenu(Menu menu)方法;

        - 调用系统提供的菜单项

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		menu.add(0, 1, 1, R.string.exit);//添加菜单项
		menu.add(0, 2, 2, R.string.about);
		return super.onCreateOptionsMenu(menu);
	}

        - 自定义菜单按钮控件,当点击菜单项中的按钮时,会调用onOptionsItemSelected(MenuItem item)

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		menu.add(0, UPDATE, 1, R.string.mp3list_update);
		menu.add(0, ABOUT, 2, R.string.mp3list_about);
		return super.onCreateOptionsMenu(menu);
	}
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		if (item.getItemId() == UPDATE) {
			updateListView();//自定义操作方法
		} else if (item.getItemId() == ABOUT) {
			// 用户点击了关于按钮
		}
		return super.onOptionsItemSelected(item);
	}

5. 单选按钮和复选框 (代码见Activity_07)

    * 单选按钮

        - 单选按钮控件(RadioButton)需要显示在单选按钮组中(RadioGroup),布局文件声明如下

<RadioGroup
	android:id="@+id/genderGroup"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"
    >
    <RadioButton
    	android:id="@+id/femaleButton"
 	    android:layout_width="wrap_content" 
  	    android:layout_height="wrap_content" 
  	    android:text="@string/female"
  	    />
    <RadioButton
    	android:id="@+id/maleButton"
 	    android:layout_width="wrap_content" 
  	    android:layout_height="wrap_content" 
  	    android:text="@string/male"
  	    />
</RadioGroup>

        - 在java中操作,添加单选按钮事件监听

        RadioGroup genderGroup = (RadioGroup)findViewById(R.id.genderGroup);
        RadioButton femaleButton = (RadioButton)findViewById(R.id.femaleButton);
        RadioButton maleButton = (RadioButton)findViewById(R.id.maleButton);
        //为RadioGroup设置监听器,需要注意的是,这里的监听器和Button控件的监听器有所不同
        genderGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
			
			@Override
			public void onCheckedChanged(RadioGroup group, int checkedId) {
				// TODO Auto-generated method stub
				if(femaleButton.getId() == checkedId){
					System.out.println("female");
					Toast.makeText(RadioTest.this, "famle", Toast.LENGTH_SHORT).show();
				}
				else if(maleButton.getId() == checkedId)
				{
					System.out.println("male");
					Toast.makeText(RadioTest.this, "male", Toast.LENGTH_LONG).show();
				}
			}
		});

    * 复选框 

        - 布局文件如下

<CheckBox
	android:id="@+id/swim"
 	android:layout_width="wrap_content" 
  	android:layout_height="wrap_content" 
  	android:text="@string/swim"
  	/>
<CheckBox
	android:id="@+id/run"
 	android:layout_width="wrap_content" 
  	android:layout_height="wrap_content" 
  	android:text="@string/run"
  	/>
<CheckBox
	android:id="@+id/read"
 	android:layout_width="wrap_content" 
  	android:layout_height="wrap_content" 
  	android:text="@string/read"
  	/>

        - java中操作,添加事件监听

        CheckBox swimBox = (CheckBox)findViewById(R.id.swim);
         //为多选按钮添加监听器
        swimBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
			
			@Override
			public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
				// TODO Auto-generated method stub
				if(isChecked)
				{
					System.out.println("swim is checked");
				}
				else
				{
					System.out.println("swim is unchecked");
				}
			}
		});

    * 显示效果

Android开发 - 惯用控件

 

6. Toast

    * 用来显示提示信息,通常显示在屏幕底部,使用非常简单

Toast.makeText(RadioTest.this, "famle", Toast.LENGTH_SHORT).show();

 

7. 进度条 (代码见progressbar)

    * 水平进度条

       - 布局文件中配置

<!-- style="?android:attr/progressBarStyleHorizontal" 进度条水平展示 进度条默认最大值为100-->
<ProgressBar
	android:id="@+id/firstBar"
	style="?android:attr/progressBarStyleHorizontal"
	android:layout_width="200px"
	android:layout_height="wrap_content"
	android:visibility="gone"
	android:max="200"
	/> 

        - java代码中操作进度条

	ProgressBar firstBar = (ProgressBar) findViewById(R.id.firstBar);
	Button myButton = (Button) findViewById(R.id.myButton);

	class ButtonListener implements OnClickListener {
		@Override
		public void onClick(View v) {

			if (i == 0) {
				//设置进度条处于可见状态
				firstBar.setVisibility(View.VISIBLE);
				firstBar.setMax(150);//设置进度条的最大值  方法二
				secondBar.setVisibility(View.VISIBLE);
			} else if (i < firstBar.getMax()) {
				//设置水平进度条的当前值
				firstBar.setProgress(i);
				firstBar.setSecondaryProgress(i + 10);
				
				//默认的进度条,不显示进度状态,因此,下面语句无意义
				secondBar.setProgress(i);
			} else {
				//设置进度条处于不可见状态
				firstBar.setVisibility(View.GONE);
				secondBar.setVisibility(View.GONE);
			}
			i += 10;
		}
	}

    * Android默认进度条 转圈显示

        - 布局文件中配置

<!-- style="?android:attr/progressBarStyle 转圈显示 -->	
<ProgressBar
	android:id="@+id/secondBar"
	style="?android:attr/progressBarStyle"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:visibility="gone"
	/>

    * 显示效果

Android开发 - 惯用控件

 

8. 列表ListView (代码见progressbar)

    * 布局文件中配置

	<LinearLayout android:id="@+id/listLinearLayout"
    	android:orientation="vertical"
    	android:layout_width="fill_parent"
    	android:layout_height="fill_parent" >
    	<ListView android:id="@id/android:list"
    		android:layout_width="fill_parent"
    		android:layout_height="wrap_content"
    		android:drawSelectorOnTop="false"
    		android:scrollbars="vertical"/>
	</LinearLayout>

    * java代码。需要实现ListActivity接口

package mars.progressbar;

import java.util.ArrayList;
import java.util.HashMap;

import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class ListTest extends ListActivity {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.list);
		ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();

		HashMap<String, String> map1 = new HashMap<String, String>();
		HashMap<String, String> map2 = new HashMap<String, String>();
		HashMap<String, String> map3 = new HashMap<String, String>();

		map1.put("user_name", "zhangshan");
		map1.put("user_ip", "192.168.1.1");
		map2.put("user_name", "lisi");
		map2.put("user_ip", "192.168.1.2");
		map3.put("user_name", "wangwu");
		map3.put("user_ip", "192.168.1.3");

		list.add(map1);
		list.add(map2);
		list.add(map3);
		//R.layout.user 布局文件
		//new String[] { "user_name", "user_ip" } 指定列名,名字必须与map中的键名一致
		//new int[] {  R.id.user_name,R.id.user_ip } 对应R.layout.user中的两个TextView
		SimpleAdapter listAdapter = new SimpleAdapter(this, list,
				R.layout.user, new String[] { "user_name", "user_ip" },
				new int[] {  R.id.user_name,R.id.user_ip });//两个数组有顺序限制
		setListAdapter(listAdapter);//将
	}
	
	//为ListView的每一行添加事件监听	
	@Override
	protected void onListItemClick(ListView l, View v, int position, long id) {
		super.onListItemClick(l, v, position, id);
		System.out.println("id:" + id);
		System.out.println("position:" + position);
	}
}

    * 显示效果

Android开发 - 惯用控件