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