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"); } } });
* 显示效果
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" />
* 显示效果
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); } }
* 显示效果