一、Toast 提示信息框
用法较为简单:
Toast.makeText(Context,String tip,Toast.LENGTH_SHORT/LONG).show();
二、CalendarView 日历视图
可用于显示和选择日期。若希望监控该组件的日期改变,可调用CalendarView的setOnDateChangeListener()方法为该组件的点击事件添加事件监听器。
<!-- 设置以星期二作为每周第一天
设置该组件总共显示3个星期
并对该组件的日期时间进行了定制 -->
<CalendarView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:firstDayOfWeek="3"
android:shownWeekCount="4"
android:selectedWeekBackgroundColor="#aff"
android:focusedMonthDateColor="#f00"
android:weekSeparatorLineColor="#ff0"
android:unfocusedMonthDateColor="#f9f"
android:id="@+id/calendarView" />
日期改变的事件监听器:
CalendarView cv = (CalendarView)findViewById(R.id.calendarView);
// 为CalendarView组件的日期改变事件添加事件监听器
cv.setOnDateChangeListener(new OnDateChangeListener()
{
@Override
public void onSelectedDayChange(CalendarView view, int year,
int month, int dayOfMonth)
{
// 使用Toast显示用户选择的日期
Toast.makeText(CalendarViewTest.this,
"你选择的日期是" + year + "年" + month + "月"
+ dayOfMonth + "日" ,
Toast.LENGTH_SHORT).show();
}
});
三、日期和时间选择器
DatePicker供用户选择日期,TimerPicker则供用户选择时间。
同理,如果需要监听用户选择的日期,可为DatePicker添加OnDateChangedListener,为TimerPicker添加OnTimerChangedListener来实现。
定义DatePicker和TimerPicker:
<!-- 定义一个DatePicker组件 -->
<DatePicker android:id="@+id/datePicker"
android:layout_width="wrap_content"
android:layout_height="200dp"
android:layout_gravity="center_horizontal"
android:startYear="2000"
android:endYear="2012"
android:calendarViewShown="true"
android:spinnersShown="true"
/>
<!-- 定义一个TimePicker组件 -->
<TimePicker android:id="@+id/timePicker"
android:layout_width="wrap_content"
android:layout_height="100dp"
android:layout_gravity="center_horizontal"
/>
初始化DatePicker TimePicker组件并同时指定监听器。
// 初始化DatePicker组件,初始化时指定监听器
datePicker.init(year, month, day, new OnDateChangedListener()
{
@Override
public void onDateChanged(DatePicker arg0, int year
, int month, int day)
{
ChooseDate.this.year = year;
ChooseDate.this.month = month;
ChooseDate.this.day = day;
// 显示当前日期、时间
showDate(year, month, day, hour, minute);
}
});
// 为TimePicker指定监听器
timePicker.setOnTimeChangedListener(new OnTimeChangedListener()
{
@Override
public void onTimeChanged(TimePicker view
, int hourOfDay, int minute)
{
ChooseDate.this.hour = hourOfDay;
ChooseDate.this.minute = minute;
// 显示当前日期、时间
showDate(year, month, day, hour, minute);
}
});
四、数值选择器 NumberPicker
<NumberPicker
android:id="@+id/np"
android:layout_width="match_parent"
android:layout_height="80dp"
android:focusable="true"
android:focusableInTouchMode="true" />
常见方法:
NumberPicker np = (NumberPicker) findViewById(R.id.np);
// 设置np1的最小值和最大值
np.setMinValue(10);
np.setMaxValue(50);
// 设置np1的当前值
np.setValue(minPrice);
np.setOnValueChangedListener(new OnValueChangeListener()
{
// 当NumberPicker的值发生改变时,将会激发该方法
@Override
public void onValueChange(NumberPicker picker, int oldVal,
int newVal)
{
minPrice = newVal;
showSelectedPrice();
}
});
五、SearchView 搜索框
让用户在文本框内输入文字,并允许通过监听器监听用户输入。当用户输入完成后提交搜索时,也可通过监听器执行实际的搜索。
如果为SearchView增加一个配套的ListView,则可以为SearchView增加自动填充的功能。
<SearchView
android:id="@+id/sv"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<!-- 为SearchView定义自动完成的ListView-->
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
搜索框的常用方法举例如下(所在类必须implements SearchView.OnQueryTextListener):
ListView lv = (ListView) findViewById(R.id.lv);
lv.setAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, mStrings));
lv.setTextFilterEnabled(true);
SearchView sv = (SearchView) findViewById(R.id.sv);
// 设置该SearchView默认是否自动缩小为图标
sv.setIconifiedByDefault(false);
// 为该SearchView组件设置事件监听器
sv.setOnQueryTextListener(this);
// 设置该SearchView显示搜索按钮
sv.setSubmitButtonEnabled(true);
// 设置该SearchView内默认显示的提示文本
sv.setQueryHint("查找");
当用户输入字符时的监听:
// 用户输入字符时激发该方法
@Override
public boolean onQueryTextChange(String newText)
{
if (TextUtils.isEmpty(newText))
{
// 清除ListView的过滤
lv.clearTextFilter();
}
else
{
// 使用用户输入的内容对ListView的列表项进行过滤
lv.setFilterText(newText);
}
return true;
}
当用户单击搜索按钮时触发的方法:
// 单击搜索按钮时激发该方法
@Override
public boolean onQueryTextSubmit(String query)
{
// 实际应用中应该在该方法内执行实际查询
// 此处仅使用Toast显示用户输入的查询内容
Toast.makeText(this, "您的选择是:" + query
, Toast.LENGTH_SHORT).show();
return false;
}
六、TabHost 选项卡
方便地在窗口上放置多个标签页(如微信界面包含微信、通讯录发现等),它是一个简单的容器,提供了如下方法来创建和添加选项卡:
newTabSpec(Stringb tag):创建选项卡
addTab(TabHost.TabSpec tabSpec):添加选项卡
与TabHost结合使用的组件:
TabWidget:代表选项卡的标签页
TabSpec:代表选项卡的一个Tab页面。
布局文件示例:
<TabHost
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 定义第一个标签页的内容 -->
<LinearLayout
android:id="@+id/tab01"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="XXX"
android:textSize="11pt" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="XXX"
android:textSize="11pt" />
</LinearLayout>
<!-- 定义第二个标签页的内容 -->
<LinearLayout
android:id="@+id/tab02"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="XXX"
android:textSize="11pt" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="XXX"
android:textSize="11pt" />
</LinearLayout>
<!-- 定义第三个标签页的内容 -->
<LinearLayout
android:id="@+id/tab03"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textSize="11pt">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="XXX"
android:textSize="11pt" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="XXX"
android:textSize="11pt" />
</LinearLayout>
</FrameLayout>
</LinearLayout>
</TabHost>
创建过程:
// 获取该Activity里面的TabHost组件
TabHost tabHost = getTabHost();
// 创建第一个Tab页
TabSpec tab1 = tabHost.newTabSpec("tab1")
.setIndicator("微信") // 设置标题
.setContent(R.id.tab01); //设置内容
// 添加第一个标签页
tabHost.addTab(tab1);
TabSpec tab2 = tabHost.newTabSpec("tab2")
// 在标签标题上放置图标
.setIndicator("通讯录", getResources()
.getDrawable(R.drawable.ic_launcher))
.setContent(R.id.tab02);
// 添加第二个标签页
tabHost.addTab(tab2);
TabSpec tab3 = tabHost.newTabSpec("tab3")
.setIndicator("发现")
.setContent(R.id.tab03);
// 添加第三个标签页
tabHost.addTab(tab3);