1.简单UI组件
Activity文件
/**
* 简单的component
* @author Administrator
*
*/
public class SimpleComponentActivity extends Activity {
private TextView tv_simple_message;
private EditText et_simple_number;
private Button btn_simple_submit;
private ImageView iv_simple_icon;
private CheckBox cb_simple_basket;
private CheckBox cb_simple_foot;
private CheckBox cb_simple_pingpang;
private RadioGroup rg_simple_sex;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simple_component);
//1. TextView
tv_simple_message = (TextView) findViewById(R.id.tv_simple_message);
tv_simple_message.setText("简单UI组件");
//2. EditText
et_simple_number = (EditText) findViewById(R.id.et_simple_number);
//3. Button
btn_simple_submit = (Button) findViewById(R.id.btn_simple_submit);
btn_simple_submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//得到内容
String number = et_simple_number.getText().toString();
//提示
Toast.makeText(SimpleComponentActivity.this, number, 0).show();
}
});
//4. ImageView
iv_simple_icon = (ImageView) findViewById(R.id.iv_simple_icon);
iv_simple_icon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//设置背景图片
iv_simple_icon.setBackgroundResource(android.R.drawable.alert_light_frame);
//设置前景图片
iv_simple_icon.setImageResource(android.R.drawable.ic_media_pause);
}
});
//5. CheckBox
cb_simple_basket = (CheckBox) findViewById(R.id.cb_simple_basket);
cb_simple_foot = (CheckBox) findViewById(R.id.cb_simple_foot);
cb_simple_pingpang = (CheckBox) findViewById(R.id.cb_simple_pingpang);
//给cb_simple_foot设置选中状态改变的监听
cb_simple_foot.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked) {
Toast.makeText(SimpleComponentActivity.this, "选中了足球", 0).show();
} else {
Toast.makeText(SimpleComponentActivity.this, "未选中足球", 0).show();
}
}
});
//6. RadioGroup/RadioButton
rg_simple_sex = (RadioGroup) findViewById(R.id.rg_simple_sex);
rg_simple_sex.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {//checkedId 选中的radioButton的id
//找到选中的radioButton
RadioButton radioButton = (RadioButton) findViewById(checkedId);
//得到文本
String sex = radioButton.getText().toString();
//提示
Toast.makeText(SimpleComponentActivity.this, sex, 0).show();
}
});
}
public void confirm(View v) {
StringBuffer sb = new StringBuffer();
if(cb_simple_basket.isChecked()) {
sb.append(cb_simple_basket.getText().toString()).append(" ");
}
if(cb_simple_foot.isChecked()) {
sb.append(cb_simple_foot.getText().toString()).append(" ");
}
if(cb_simple_pingpang.isChecked()) {
sb.append(cb_simple_pingpang.getText().toString());
}
//提示
Toast.makeText(this, sb.toString(), 0).show();
}
}
xml文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tv_simple_message"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="这是TextView的内容"
android:background="#999999"
android:textColor="#ff0000"
android:textSize="20sp"/>
<EditText
android:id="@+id/et_simple_number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入手机号"
android:inputType="phone">
</EditText>
<Button
android:id="@+id/btn_simple_submit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="提交" />
<ImageView
android:id="@+id/iv_simple_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:drawable/alert_dark_frame"
android:src="@android:drawable/ic_media_play"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="爱好: " />
<CheckBox
android:id="@+id/cb_simple_basket"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="篮球" />
<CheckBox
android:id="@+id/cb_simple_foot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="足球" />
<CheckBox
android:id="@+id/cb_simple_pingpang"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="乒乓" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="确定"
android:onClick="confirm"/>
</LinearLayout>
<RadioGroup
android:id="@+id/rg_simple_sex"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/rb_simple_male"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="男" />
<RadioButton
android:id="@+id/rb_simple_female"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="女"
android:checked="true"/>
<RadioButton
android:id="@+id/rb_simple_nomale"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="东方不败" />
</RadioGroup>
</LinearLayout>
2.菜单Menu
Activity文件
/**
* 测试Menu
*
* @author 张晓飞
*
*/
/*
OptionMenu
1. 如何触发Menu的显示?
点击menu键
2. 如何向Menu中添加MenuItem?
重写onCreateOptionMenu()
menu.add()或者加载菜单文件
3. 选择某个MenuItem时如何响应?
重写onOptionsItemSelected(), 根据itemId做响应
ContextMenu
1. 如何触发Menu的显示?
长按某个视图
view.setOnCreateContextMenuListener(this)
2. 如何向Menu中添加MenuItem?
重写onCreateContextMenu()
menu.add()
3. 选择某个MenuItem时如何响应?
重写onContextItemSelected(), 根据itemId做响应
*/
public class MenuActivity extends Activity {
private Button btn_test2_show_cm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
btn_test2_show_cm = (Button) findViewById(R.id.btn_test2_show_cm);
//设置创建上下文菜单的监听
btn_test2_show_cm.setOnCreateContextMenuListener(this);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
//添加菜单项
menu.add(0, 1, 0, "添加");
menu.add(0, 4, 0, "删除");
}
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 1:
Toast.makeText(this, "添加", 0).show();
break;
case 4:
Toast.makeText(this, "删除", 0).show();
break;
default:
break;
}
return super.onContextItemSelected(item);
}
// 用来显示optionmenu的方法: 向menu中添加Item
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// 纯编码方式
menu.add(0, 2, 0, "添加");
menu.add(0, 3, 0, "删除");
return super.onCreateOptionsMenu(menu);
}
/*@Override
public boolean onCreateOptionsMenu(Menu menu) {
// 菜单文件方式
//1. 得到菜单加载器对象
MenuInflater menuInflater = getMenuInflater();
//2. 加载菜单文件
menuInflater.inflate(R.menu.option_menu, menu);
return super.onCreateOptionsMenu(menu);
}*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
//case R.id.add:
case 2:
Toast.makeText(this, "添加", 0).show();
break;
//case R.id.delete:
case 3:
Toast.makeText(this, "删除", 0).show();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
}
xml文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/btn_test2_show_cm"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="显示ContextMenu" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="1. 点击menu显示选项菜单\n2. 长按按钮显示上下文菜单"
android:textSize="25dp" />
</LinearLayout>
3.进度条
Activity文件
/**
* 测试进度条
* @author 张晓飞
*
*/
public class ProgressActivity extends Activity {
private LinearLayout ll_progress_loading;
private ProgressBar pb_progress_loading;
private SeekBar sb_progress_loading;
private OnSeekBarChangeListener onSeekBarChangeListener = new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {//离开滑杆
Log.e("TAG", "离开滑杆");
//1. 得到seekBar的进度
int progress = sb_progress_loading.getProgress();
//2. 设置为ProgressBar的进度
pb_progress_loading.setProgress(progress);
//3. 判断是否达到最大值
if(progress==sb_progress_loading.getMax()) {
//如果达到了, 设置ll_progress_loading不可见
//ll_progress_loading.setVisibility(View.INVISIBLE); //不可见, 但占用空间
ll_progress_loading.setVisibility(View.GONE);不可见, 且不占用空间
} else {
//如果没有达到 设置ll_progress_loading显示
ll_progress_loading.setVisibility(View.VISIBLE);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {//按下滑杆
Log.e("TAG", "按下滑杆");
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {//滑杆移动
Log.e("TAG", "滑杆移动");
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_progress);
ll_progress_loading = (LinearLayout) findViewById(R.id.ll_progress_loading);
pb_progress_loading = (ProgressBar) findViewById(R.id.pb_progress_loading);
sb_progress_loading = (SeekBar) findViewById(R.id.sb_progress_loading);
//给seekbar设置监听
sb_progress_loading.setOnSeekBarChangeListener(onSeekBarChangeListener );
}
}
xml文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/ll_progress_loading"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="正在加载中..." />
</LinearLayout>
<ProgressBar
android:id="@+id/pb_progress_loading"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:progress="30"/>
<SeekBar
android:id="@+id/sb_progress_loading"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="1. 滑动下面的滑杆后, 上面的进度条会同步\n2. 滑动到最大值时, 最上面的进度条消失" />
</LinearLayout>
4.对话框
Activity文件
public class DialogActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dialog);
}
/**
* 显示一般AlertDialog
* @param v
*/
public void showAD(View v) {
//new AlertDialog.Builder(this).create().show();
new AlertDialog.Builder(this)
.setTitle("删除数据")//设置标题
.setMessage("你确定删除数据吗")
.setPositiveButton("删除", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(DialogActivity.this, "删除数据", 0).show();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(DialogActivity.this, "取消删除数据", 0).show();
}
})
.show(); //方法链调用
}
/**
* 显示单选列表AlertDialog
* @param v
*/
public void showLD(View v) {
final String[] items = {"红", "蓝", "绿", "灰"}; //final的变量在方法执行完后还存在
new AlertDialog.Builder(this)
.setTitle("指定背景颜色")
.setSingleChoiceItems(items, 2, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {//which就是选中的position
//提示颜色
Toast.makeText(DialogActivity.this, items[which], 0).show();
//移除dilaog
dialog.dismiss();
}
})
.show();
}
/**
* 显示自定义AlertDialog
* @param v
*/
public void showCD(View v) {
//动态加载布局文件, 得到对应的View对象
View view = View.inflate(this, R.layout.dialog_view, null);
//问题1: view的真实类型?是布局文件根标签的类型, 包含了子View对象
//问题2: 如何得到一个独立View的子View? view.findViewById(id)
//findViewById(id)是在setContentView()中的View中找
final EditText nameET = (EditText) view.findViewById(R.id.et_dialog_name);
final EditText pwdET = (EditText) view.findViewById(R.id.et_dialog_pwd);
new AlertDialog.Builder(this)
.setView(view)
.setNegativeButton("取消", null)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//读取用户名和密码
String username = nameET.getText().toString();
String pwd = pwdET.getText().toString();
//提示
Toast.makeText(DialogActivity.this, username+" : "+pwd, 0).show();
}
})
.show();
}
/**
* 显示圆形进度ProgressDialog
* @param v
* @throws InterruptedException
*/
public void showPD(View v){//回调方法: 主线程执行
final ProgressDialog dialog = ProgressDialog.show(this, "数据加载", "数据加载中...");
//模拟做一个长时间的工作
//长时间的工作不能在主线程做, 得启动分线程完成
new Thread(){
public void run() {//分线程
for(int i=0;i<20;i++) {
//休息一会
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//移除dialog
dialog.dismiss();//方法在分线程执行, 但内部使用Handler实现主线程移除dialog
//不能在分线程直接更新UI
//显示toast
//Toast.makeText(DialogActivity.this, "加载完成了!!!", 0).show();
runOnUiThread(new Runnable() {
@Override
public void run() {//在主线程执行
Toast.makeText(DialogActivity.this, "加载完成了!!!", 0).show();
}
});
//runOnUiThread()在分线程执行
}
}.start();
}
/**
* 显示水平进度ProgressDialog
* @param v
*/
public void showPD2(View v) {
//1. 创建dialog对象
final ProgressDialog pd = new ProgressDialog(this);
//2. 设置样式
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
//3. 显示
pd.show();
//4. 启动分线程, 加载数据, 并显示进度, 当加载完成移除dilaog
new Thread(new Runnable() {
@Override
public void run() {
int count = 20;
//设置最大进度
pd.setMax(count);
for(int i=0;i<count;i++) {
//休息一会
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
pd.setProgress(pd.getProgress()+1);
}
//移除dialog
pd.dismiss();
}
}).start();
}
public void showDateAD(View v) {
//创建日历对象
Calendar calendar = Calendar.getInstance();
//得到当前的年月日
int year = calendar.get(Calendar.YEAR);//得到年份
int monthOfYear = calendar.get(Calendar.MONTH);//月
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);//得到日
Log.e("TAG", year+"-"+monthOfYear+"-"+dayOfMonth);
new DatePickerDialog(this, new OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
Log.e("TAG", year+"--"+(monthOfYear+1)+"--"+dayOfMonth);
}
}, year, monthOfYear, dayOfMonth).show();
}
public void showTimeAD(View v) {
Calendar c = Calendar.getInstance();
int hourOfDay = c.get(Calendar.HOUR_OF_DAY); //得到小时
int minute = c.get(Calendar.MINUTE); //得到分钟
Log.e("TAG", hourOfDay+":"+minute);
new TimePickerDialog(this, new OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Log.e("TAG", hourOfDay+"::"+minute);
}
}, hourOfDay, minute, true).show();
}
}
xml文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<!-- AlertDialog -->
<Button
android:id="@+id/btn_test4_ad"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="showAD"
android:text="显示一般AlertDialog" />
<Button
android:id="@+id/btn_test4_ld"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="showLD"
android:text="显示单选列表AlertDialog" />
<Button
android:id="@+id/btn_test4_custom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="showCD"
android:text="显示自定义AlertDialog" />
<!-- ProgressDialog -->
<Button
android:id="@+id/btn_test4_pd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="showPD"
android:text="显示圆形进度ProgressDialog"
android:layout_marginTop="20dp"/>
<Button
android:id="@+id/btn_test4_pd2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="showPD2"
android:text="显示水平进度ProgressDialog" />
<!-- DatePickerDialog与TimePickerDialog -->
<Button
android:id="@+id/btn_test4_dd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="showDateAD"
android:text="显示DatePickerDialog"
android:layout_marginTop="20dp"/>
<Button
android:id="@+id/btn_test4_td"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="showTimeAD"
android:text="显示TimePickerDialog" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:src="@drawable/title"
android:scaleType="fitXY"/>
<EditText
android:id="@+id/et_dialog_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="用户名">
</EditText>
<EditText
android:id="@+id/et_dialog_pwd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="密码"
android:inputType="textPassword"/>
</LinearLayout>