一、自动完成文本框AutoCompleteTextView
android:layout_height="wrap_content"
android:completionHint="请选择您喜欢的图书"
android:dropDownHorizontalOffset="20dp"
android:completionThreshold="3"/>
//定义字符串数组,作为提示的文本
String[] books = new String[]{
"会有天使替我爱你",
"梦里花落知多少",
"幻城",
"猜火车",
"三重门",
"android疯狂讲义"
};
//创建一个ArrayAdapter,封装数组
ArrayAdapter
this, android.R.layout.simple_dropdown_item_1line,books);
AutoCompleteTextView actv = (AutoCompleteTextView) findViewById(R.id.auto);
//设置Adapter
actv.setAdapter(aa);
二、Spinner列表选择框
1.Spinner组件与Swing编程中的Spinner不同,此处的Spinner其实就是一个列表选择框,不过Android
的列表选择框并不是需要显示下拉列表的,而是相当于弹出一个菜单供用户选择
android:entries="@array/books"/>
arrays.xml放在values目录下
2.不存储列表项的Spinner
对于Spinner而言,它也许需要显示一个用户选择的列表---至于这个列表
到底以数组的形式给出,还是以其它的什么形式给出,这不重要。
重要的是Spinner知道它的每项应该显示什么
android:layout_height="wrap_content"/>
BaseAdapter ba = new BaseAdapter() {
//重写该方法,该方法返回的View将作为列表框的每项
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView text = new TextView(SpinnerTest2Activity.this);
text.setText(position + "");
text.setTextSize(20);
text.setTextColor(R.color.red);
return text;
}
@Override
public int getCount() {
//指定一共包含10个选项
return 10;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public Object getItem(int position) {
return null;
}
};
Spinner spinner = (Spinner) findViewById(R.id.test);
spinner.setAdapter(ba);
colors.xml放在values目录下
通过为Spinner提供Adapter可以非常灵活的定制Spinner,包括重绘Spinner对象的列表的外观。
只要喜欢,可以让重写getView方法返回任意的View对象,该对象将会作为Spinner的列表项
修改上面的getView方法:
//重写该方法,该方法返回的View将作为列表框的每项
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LinearLayout line = new LinearLayout(SpinnerTest2Activity.this);
line.setOrientation(0);
ImageView image = new ImageView(SpinnerTest2Activity.this);
image.setImageResource(R.drawable.ic_launcher);
TextView text = new TextView(SpinnerTest2Activity.this);
text.setText(position + "");
text.setTextSize(20);
text.setTextColor(R.color.red);
line.addView(image);
line.addView(text);
return line;
}
三、日期、时间选择器DatePicker和TimePicker
android:layout_height="wrap_content"
android:text="选择购买本书的具体时间" />
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"/>
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"/>
android:layout_height="wrap_content"
android:editable="false"
android:cursorVisible="false"/>
DatePicker datePicker = (DatePicker) findViewById(R.id.datePicker);
TimePicker timePicker = (TimePicker) findViewById(R.id.timePicker);
//获取当前的年、月、日、小时、分钟
Calendar c = Calendar.getInstance();
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);
hour = c.get(Calendar.HOUR);
minute = c.get(Calendar.MINUTE);
//初始化DatePicker组件,初始化时指定监听器
datePicker.init(year, month, day, new OnDateChangedListener() {
@Override
public void onDateChanged(DatePicker view, int year, int month,
int day) {
ChooseDateActivity.this.year = year;
ChooseDateActivity.this.month = month;
ChooseDateActivity.this.day = day;
//显示当前日期、时间
showDate(year, month, day, hour, minute);
}
});
timePicker.setOnTimeChangedListener(new OnTimeChangedListener() {
@Override
public void onTimeChanged(TimePicker view, int hour, int minute) {
ChooseDateActivity.this.hour = hour;
ChooseDateActivity.this.minute = minute;
showDate(year, month, day, hour, minute);
}
});
}
//定义在EditText中显示当前日期、时间的方法
private void showDate(int year,int month,int day,int hour,int minute)
{
EditText show = (EditText) findViewById(R.id.show);
show.setText("您的购买日期为:"+year + "年" +(month + 1) + "月"
+ day + "日" + hour + "时" + minute + "分");
}
四、进度条ProgressBar
1.
android:layout_height="wrap_content"
android:text="任务完成的进度" />
android:layout_height="wrap_content"
android:max="100"
style="@android:style/Widget.ProgressBar.Horizontal"/>
android:layout_height="wrap_content"
android:max="100"
android:progressDrawable="@drawable/my_bar"
style="@android:style/Widget.ProgressBar.Horizontal"/>
my_bar.xml
//该程序模拟填充长度为100的数组
private int[] data = new int[100];
int hasData = 0;
//记录ProgressBar的完成进度
int statu = 0;
final ProgressBar bar = (ProgressBar) findViewById(R.id.bar);
final ProgressBar bar2 = (ProgressBar) findViewById(R.id.bar2);
//创建一个负责更新的进度的Handler
final Handler mHandler = new Handler()
{
@Override
public void handleMessage(Message msg) {
// 表明消息是由该程序发送的
if(msg.what==0x111)
{
bar.setProgress(statu);
bar2.setProgress(statu);
}
super.handleMessage(msg);
}
};
//启动线程来执行任务
new Thread()
{
public void run() {
while(statu < 100)
{
//获取耗时操作的完成百分比
statu = doWork();
//发送消息到Handler
Message m = new Message();
m.what = 0x111;
//发送消息
mHandler.sendMessage(m);
}
};
}.start();
}
//模拟一个耗时的操作
public int doWork()
{
//为数组元素赋值
data[hasData++] = (int) (Math.random()*100);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return hasData;
}
2.显示在标题上的进度条
super.onCreate(savedInstanceState);
//设置窗口特征:启用显示进度的进度条
requestWindowFeature(Window.FEATURE_PROGRESS);
//设置窗口特征:启用不显示进度的进度条
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.main);
Button bn1 = (Button) findViewById(R.id.bn01);
Button bn2 = (Button) findViewById(R.id.bn02);
bn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//显示不带进度的进度条
setProgressBarIndeterminateVisibility(true);
//显示带进度的进度条
setProgressBarVisibility(true);
//设置进度条的进度
setProgress(4500);
}
});
bn2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//隐藏不带进度的进度条
setProgressBarIndeterminateVisibility(false);
//隐藏带进度的进度条
setProgressBarVisibility(false);
}
});
五、拖动条SeekBar
android:layout_width="fill_parent"
android:layout_height="240px"
android:src="@drawable/lijiang"/>
android:layout_height="wrap_content"
android:max="255"
android:progress="255"
android:thumb="@drawable/icon"/>
final ImageView image = (ImageView) findViewById(R.id.image);
SeekBar seekBar = (SeekBar) findViewById(R.id.seekbar);
seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {}
//当拖动条的滑块位置发生改变时触发该方法
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser)
{
image.setAlpha(progress);
}
});
六、星级评分条
android:layout_height="240px"
android:src="@drawable/lijiang"/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5"
android:max="255"
android:progress="255"
android:stepSize="0.5"/>
final ImageView image = (ImageView) findViewById(R.id.image);
RatingBar ratingBar = (RatingBar) findViewById(R.id.rating);
ratingBar.setOnRatingBarChangeListener(new OnRatingBarChangeListener() {
//当拖动条的滑块位置发生改变时触发该方法
@Override
public void onRatingChanged(RatingBar ratingBar, float rating,
boolean fromUser)
{
//动态改变图片的透明度,其中255是星级评分条的最大值
//5个星就代表最大值255
image.setAlpha((int) (rating*255/5));
}
});
七、选项卡TabHost
android:layout_height="fill_parent">
android:layout_width="fill_parent"
android:layout_height="fill_parent">
android:layout_height="wrap_content"
android:text="xiaoming"/>
android:layout_width="fill_parent"
android:layout_height="fill_parent">
android:layout_height="wrap_content"
android:text="zhongming"/>
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textSize="11pt">
android:layout_height="wrap_content"
android:text="daming"/>
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
TabHost tabHost = getTabHost();
//设置使用TabHost布局
LayoutInflater.from(this).inflate(R.layout.main, tabHost.getTabContentView(),true);
//添加第一个标签页
tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("已接电话").setContent(R.id.tab01));
//添加第二个标签页
tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("呼出电话",getResources().getDrawable(R.drawable.ic_launcher)).setContent(R.id.tab02));
//添加第三个标签页
tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("未接电话").setContent(R.id.tab03));
八、滚动试图ScrollView
android:layout_height="fill_parent" >
android:layout_height="fill_parent">
android:layout_height="wrap_content"
android:text="gundongshitugundongshitu"/>
android:layout_height="wrap_content"
android:text="gundongshitugundongshitu"/>
九、列表视图ListView
1.基于数组的ListView
arrays.xml
android:layout_height="wrap_content"
android:entries="@array/books"
android:divider="@drawable/red"/>
2. 通过ArrayAdapter使用数组来提供列表项
android:layout_height="wrap_content"
android:divider="@drawable/green">
ListView list2 = (ListView) findViewById(R.id.list2);
//定义一个数组
String[] arr = {"郭敬明","韩寒","明晓溪"};
//将数组包装ArrayAdapter
ArrayAdapter
android.R.layout.simple_list_item_1, arr);
//为ListView设置Adapter
list2.setAdapter(arrayAdapter);
说明:
simple_list_item_1每个列表项都是一个普通的TextView
simple_list_item_2每个列表项都是一个普通的TextView(字体略大)
simple_list_item_checked每个列表项都是一个已勾选的列表项
simple_list_item_multiple_choice每个列表项都是带多选框的文本
simple_list_item_single_choice每个列表项都是带多单选按钮的文本
3.基于ListActivity实现列表
super.onCreate(savedInstanceState);
//定义一个数组
String[] arr = {"郭敬明","韩寒","明晓溪"};
//将数组包装ArrayAdapter
ArrayAdapter
android.R.layout.simple_list_item_multiple_choice, arr);
//设置该窗口显示列表
setListAdapter(arrayAdapter);
4.使用SimpleAdapter创建ListView
android:layout_height="wrap_content"/>
android:layout_height="wrap_content"
android:paddingLeft="10dp"/>
android:layout_height="wrap_content"
android:textSize="16dp"
android:gravity="center_vertical"
android:paddingLeft="10dp"/>
private String[] names = new String[]{
"虎头","弄玉","李清照","李白"};
private int[] imageIds = new int[]{
R.drawable.tiger,
R.drawable.nongyu,
R.drawable.qingzhao,
R.drawable.libai
};
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//创建一个List集合,List集合的元素是Map
List