此篇将介绍Android其他常用UI组件
2.8.1 使用Toast显示提示信息框
Toast这个提示信息框用于向用户生成简单的提示信息,它有如下特点:
1.Toast 提示不会获得焦点
2.Toast提示会在一段时间后自动消失
使用Toast生成提示消息也非常简单,只要如下几个步骤:
1.调用Toast构造器或makeText()静态方法创建一个Toast对象
2.调用Toast的方法来设置该消息提示对齐方式、页边距等
3.调用Toast的show()方法将它显示出来
示例代码:
public
class
MainActivity
extends
ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_main );
Button simple = (Button) findViewById(R.id. simple );
simple.setOnClickListener( new OnClickListener()
{
@Override
public void onClick(View source)
{
Toast toast = Toast.makeText(MainActivity. this , "simple hint" ,Toast. LENGTH_SHORT );
toast.show();
}
});
Button bn = (Button) findViewById(R.id. bn );
bn.setOnClickListener( new OnClickListener()
{
@Override
public void onClick(View source)
{
Toast toast = new Toast(MainActivity. this );
toast.setGravity(Gravity. CENTER , 0, 0);
ImageView image = new ImageView(MainActivity. this );
image.setImageResource(R.drawable. tools );
LinearLayout ll = new LinearLayout(MainActivity. this );
ll.addView(image);
TextView textView = new TextView(MainActivity. this );
textView.setText( "hint with pic" );
textView.setTextSize(20);
ll.addView(textView);
toast.setView(ll);
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_main );
Button simple = (Button) findViewById(R.id. simple );
simple.setOnClickListener( new OnClickListener()
{
@Override
public void onClick(View source)
{
Toast toast = Toast.makeText(MainActivity. this , "simple hint" ,Toast. LENGTH_SHORT );
toast.show();
}
});
Button bn = (Button) findViewById(R.id. bn );
bn.setOnClickListener( new OnClickListener()
{
@Override
public void onClick(View source)
{
Toast toast = new Toast(MainActivity. this );
toast.setGravity(Gravity. CENTER , 0, 0);
ImageView image = new ImageView(MainActivity. this );
image.setImageResource(R.drawable. tools );
LinearLayout ll = new LinearLayout(MainActivity. this );
ll.addView(image);
TextView textView = new TextView(MainActivity. this );
textView.setText( "hint with pic" );
textView.setTextSize(20);
ll.addView(textView);
toast.setView(ll);
toast.setDuration(Toast.LENGTH_LONG);
toast.show();
}
});
}
}
2.8.2 CalendarView
可用于显示和选择日期;若希望监控该组件的日期改变,可调用CalendarView的setOnDateChangeListener()方法为此组件的点击时间添加事件监听器
android:dataTextAppearance
|
|
|
android:firstDayOfWeek
|
|
|
android:focusedMonthDateColor
|
|
|
android:maxDate
|
|
|
android:minDate
|
|
|
android:selectedDateVerticalBar
|
|
|
android:selectedWeekBackgroundColor
|
|
|
android:showWeekNumber
|
|
|
android:shownWeekCount
|
|
设置日历总共显示几个星期
|
android:unfocusedMonthDateColor
|
|
|
android:weekDayTextAppearance
|
|
|
android:weekNumberColor
|
|
|
android:weekSeparatorLineColor
|
|
|
示例代码:
main.xml
<
LinearLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:orientation = "vertical" >
< TextView
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:text = "select your birthday" />
< 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" />
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:orientation = "vertical" >
< TextView
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:text = "select your birthday" />
< 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" />
</
LinearLayout
>
Java程序代码:
public
class
MainActivity
extends
ActionBarActivity {
CalendarView cv ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_main );
cv = (CalendarView) findViewById(R.id. calendarView );
cv .setOnDateChangeListener( new OnDateChangeListener()
{
@Override
public void onSelectedDayChange(CalendarView view, int year,
int month, int dayOfMonth)
{
Toast.makeText(MainActivity. this , "your birthday is" + year + "." + month+ "." +dayOfMonth, Toast. LENGTH_SHORT ).show();
}
});
CalendarView cv ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_main );
cv = (CalendarView) findViewById(R.id. calendarView );
cv .setOnDateChangeListener( new OnDateChangeListener()
{
@Override
public void onSelectedDayChange(CalendarView view, int year,
int month, int dayOfMonth)
{
Toast.makeText(MainActivity. this , "your birthday is" + year + "." + month+ "." +dayOfMonth, Toast. LENGTH_SHORT ).show();
}
});
}
}
2.8.3 DatePicker和TimePicker
程序获取用户选择的日期、时间,可通过
为DatePicker添加OnDateChangedListener进行监听
为TimePicker添加OnTimerChangedListener进行监听
DatePicker支持的XML属性有
android:calendarViewShown
|
该日期选择是否显示CalendarView组件
|
android:endYear
|
|
android:maxDate
|
|
android:minDate
|
|
android:spinnerShown
|
该选择器是否显示Spinner日期选择组件
|
android:startYear
|
|
示例代码:
public
class
MainActivity
extends
Activity {
private int year ;
private int month ;
private int day ;
private int hour ;
private int minute ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_main );
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.init( year , month , day , new OnDateChangedListener()
{
@Override
public void onDateChanged(DatePicker arg0, int year, int month, int day)
{
MainActivity. this . year = year;
MainActivity. this . month = month;
MainActivity. this . day = day;
showDate(year, month, day, hour , minute );
}
});
// timePicker.setOnTimeChangedListener(new onTimeChangedListener()
// {
// @Override
// public void onTimeChanged(TimePicker view, int hourOfDay, int minute)
// {
// MainActivity.this.hour = hourOfDay;
// MainActivity.this.minute = minute;
// showDate(year, month, day, hour, minute);
// }
// });
}
private void showDate( int year, int month, int day, int hour, int minute)
{
EditText show = (EditText) findViewById(R.id. show );
show.setText( "your purcharse day is " +year + "." +
(month + 1) + "." + day + " " + hour + ":" +minute);
private int year ;
private int month ;
private int day ;
private int hour ;
private int minute ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_main );
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.init( year , month , day , new OnDateChangedListener()
{
@Override
public void onDateChanged(DatePicker arg0, int year, int month, int day)
{
MainActivity. this . year = year;
MainActivity. this . month = month;
MainActivity. this . day = day;
showDate(year, month, day, hour , minute );
}
});
// timePicker.setOnTimeChangedListener(new onTimeChangedListener()
// {
// @Override
// public void onTimeChanged(TimePicker view, int hourOfDay, int minute)
// {
// MainActivity.this.hour = hourOfDay;
// MainActivity.this.minute = minute;
// showDate(year, month, day, hour, minute);
// }
// });
}
private void showDate( int year, int month, int day, int hour, int minute)
{
EditText show = (EditText) findViewById(R.id. show );
show.setText( "your purcharse day is " +year + "." +
(month + 1) + "." + day + " " + hour + ":" +minute);
}
}
xml代码:
<
LinearLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:orientation = "vertical" >
< TextView
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "time you buy the books"
android:textSize = "20dp" />
< 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
android:id = "@+id/timePicker"
android:layout_width = "wrap_content"
android:layout_height = "100dp"
android:layout_gravity = "center_horizontal"
/>
< EditText
android:id = "@+id/show"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:editable = "false"
android:cursorVisible = "false"
/>
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:orientation = "vertical" >
< TextView
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "time you buy the books"
android:textSize = "20dp" />
< 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
android:id = "@+id/timePicker"
android:layout_width = "wrap_content"
android:layout_height = "100dp"
android:layout_gravity = "center_horizontal"
/>
< EditText
android:id = "@+id/show"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:editable = "false"
android:cursorVisible = "false"
/>
</
LinearLayout
>
2.8.4 NumberPicker
用户可通过拖动来选择数值。常用的方法如下:
setMinValue(int minVal)
|
设置该组件支持的最小值
|
setMaxValue(int maxVal)
|
设置该组件支持的最大值
|
setValue(int value)
|
设置该组件的当前值
|
示例代码:
public
class
MainActivity
extends
ActionBarActivity {
NumberPicker np1 , np2 ;
int minPrice = 25;
int maxPrice = 75;
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_main );
np1 = (NumberPicker) findViewById(R.id. np1 );
np1 .setMinValue(10);
np1 .setMaxValue(50);
np1 .setValue( minPrice );
np1 .setOnValueChangedListener( new OnValueChangeListener()
{
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal)
{
minPrice = newVal;
showSelectedPrice();
}
});
np2 = (NumberPicker) findViewById(R.id. np2 );
np2 .setMinValue(60);
np2 .setMaxValue(100);
np2 .setValue( maxPrice );
np2 .setOnValueChangedListener( new OnValueChangeListener()
{
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal)
{
maxPrice = newVal;
showSelectedPrice();
}
});
}
public void showSelectedPrice()
{
Toast.makeText( this , "the lowest price you've choosen is" + minPrice
+ ", the highest price is" + maxPrice , Toast. LENGTH_SHORT ).show();
NumberPicker np1 , np2 ;
int minPrice = 25;
int maxPrice = 75;
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_main );
np1 = (NumberPicker) findViewById(R.id. np1 );
np1 .setMinValue(10);
np1 .setMaxValue(50);
np1 .setValue( minPrice );
np1 .setOnValueChangedListener( new OnValueChangeListener()
{
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal)
{
minPrice = newVal;
showSelectedPrice();
}
});
np2 = (NumberPicker) findViewById(R.id. np2 );
np2 .setMinValue(60);
np2 .setMaxValue(100);
np2 .setValue( maxPrice );
np2 .setOnValueChangedListener( new OnValueChangeListener()
{
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal)
{
maxPrice = newVal;
showSelectedPrice();
}
});
}
public void showSelectedPrice()
{
Toast.makeText( this , "the lowest price you've choosen is" + minPrice
+ ", the highest price is" + maxPrice , Toast. LENGTH_SHORT ).show();
}
}
main.xml代码:
<
TableLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent" >
< TableRow
android:layout_width = "match_parent"
android:layout_height = "wrap_content" >
< TextView
android:text = "choose low price"
android:layout_width = "120dp"
android:layout_height = "wrap_content" />
< NumberPicker
android:id = "@+id/np1"
android:layout_width = "match_parent"
android:layout_height = "80dp"
android:focusable = "true"
android:focusableInTouchMode = "true" />
</ TableRow >
< TableRow
android:layout_width = "match_parent"
android:layout_height = "wrap_content" >
< TextView
android:text = "choose high price"
android:layout_width = "120dp"
android:layout_height = "wrap_content" />
< NumberPicker
android:id = "@+id/np2"
android:layout_width = "match_parent"
android:layout_height = "80dp"
android:focusable = "true"
android:focusableInTouchMode = "true" />
</ TableRow >
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent" >
< TableRow
android:layout_width = "match_parent"
android:layout_height = "wrap_content" >
< TextView
android:text = "choose low price"
android:layout_width = "120dp"
android:layout_height = "wrap_content" />
< NumberPicker
android:id = "@+id/np1"
android:layout_width = "match_parent"
android:layout_height = "80dp"
android:focusable = "true"
android:focusableInTouchMode = "true" />
</ TableRow >
< TableRow
android:layout_width = "match_parent"
android:layout_height = "wrap_content" >
< TextView
android:text = "choose high price"
android:layout_width = "120dp"
android:layout_height = "wrap_content" />
< NumberPicker
android:id = "@+id/np2"
android:layout_width = "match_parent"
android:layout_height = "80dp"
android:focusable = "true"
android:focusableInTouchMode = "true" />
</ TableRow >
</
TableLayout
>
2.8.5 SearchView
常用方法:
setIconifiedByDefault(boolean iconified)
|
设置该搜索框默认是否自动缩小为图标
|
setSubmitButtonEnable(boolean enabled)
|
设置是否显示搜索框
|
setQueryHint(CharSequence hint)
|
|
setOnQueryTextListener(SearchView.OnQueryTextListenter listener)
|
为该搜索框设置事件监听器
|
若为SearchView增加一个配套的ListView,则可以为SearchView增加自动完成功能
示例代码:
public
class
MainActivity
extends
Activity
implements
SearchView.OnQueryTextListener{
private SearchView sv ;
private ListView lv ;
private final String[] mStrings ={ "aaaaaa" , "bbbbbb" , "cccccc" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_main );
lv = (ListView) findViewById(R.id. lv );
lv .setAdapter( new ArrayAdapter<String>( this ,android.R.layout. simple_list_item_1 , mStrings ));
sv = (SearchView) findViewById(R.id. sv );
sv .setIconifiedByDefault( false );
sv .setOnQueryTextListener( this );
sv .setSubmitButtonEnabled( true );
sv .setQueryHint( "search" );
}
@Override
public boolean onQueryTextChange(String newText)
{
if (TextUtils.isEmpty(newText))
{
lv .clearTextFilter();
}
else
{
lv .setFilterText(newText);
}
return true ;
}
@Override
public boolean onQueryTextSubmit(String query)
{
Toast.makeText( this , "your choice is " +query, Toast. LENGTH_SHORT ).show();
return false ;
private SearchView sv ;
private ListView lv ;
private final String[] mStrings ={ "aaaaaa" , "bbbbbb" , "cccccc" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_main );
lv = (ListView) findViewById(R.id. lv );
lv .setAdapter( new ArrayAdapter<String>( this ,android.R.layout. simple_list_item_1 , mStrings ));
sv = (SearchView) findViewById(R.id. sv );
sv .setIconifiedByDefault( false );
sv .setOnQueryTextListener( this );
sv .setSubmitButtonEnabled( true );
sv .setQueryHint( "search" );
}
@Override
public boolean onQueryTextChange(String newText)
{
if (TextUtils.isEmpty(newText))
{
lv .clearTextFilter();
}
else
{
lv .setFilterText(newText);
}
return true ;
}
@Override
public boolean onQueryTextSubmit(String query)
{
Toast.makeText( this , "your choice is " +query, Toast. LENGTH_SHORT ).show();
return false ;
}
}
main.xml代码:
<
LinearLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:orientation = "vertical" >
< SearchView
android:id = "@+id/sv"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content" />
< ListView
android:id = "@+id/lv"
android:layout_width = "match_parent"
android:layout_height = "0dp"
android:layout_weight = "1" ></ ListView >
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:orientation = "vertical" >
< SearchView
android:id = "@+id/sv"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content" />
< ListView
android:id = "@+id/lv"
android:layout_width = "match_parent"
android:layout_height = "0dp"
android:layout_weight = "1" ></ ListView >
</
LinearLayout
>
2.8.6 TabHost
TabHost可以在窗口上放置多个标签,与TabWidget结合使用的还有如下组件:
TabWidget
|
代表选项卡的标签条
|
TabSpec
|
代表选项卡的一个Tab页面
|
TabHost仅仅是一个简单的容器,它提供了如下两个方法来创建、添加选项卡:
newTabSpec(String tag)
|
创建选项卡
|
addTab(TabHost.TabSpec tabSpec)
|
添加选项卡
|
使用TabHost的一般步骤如下:
- 在布局界面中定义TabHost组件,并为该组件定义该选项卡内容
- Activity应该继承TabActivity
- 调用TabActivity的getTabHost()方法获取TabHost对象
- 通过TabHost对象的方法来创建、添加选项卡
tips:若想监听,设置TabHost.OnTabChangeListener
TabHost使用时 main.xml中需要结合TabWidget使用,并且
TabHost
|
@android:id/tabhos
|
TabWidget
|
@android:id/tabs
|
FrameLayout
|
@android:id/tabcontent
|
上面3个ID是Android系统已有ID
示例代码:
main.xml
<
TabHost
xmlns:android
=
"http://schemas.android.com/apk/res/android"
xmlns:tools = "http://schemas.android.com/tools"
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 = "match_parent"
android:layout_height = "match_parent" >
< TextView
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "testview" />
< TextView
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "testview 2" />
</ LinearLayout >
< LinearLayout
android:id = "@+id/tab02"
android:orientation = "vertical"
android:layout_width = "match_parent"
android:layout_height = "match_parent" >
< TextView
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "testview" />
< TextView
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "testview 2" />
</ LinearLayout >
< LinearLayout
android:id = "@+id/tab03"
android:orientation = "vertical"
android:layout_width = "match_parent"
android:layout_height = "match_parent" >
< TextView
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "testview" />
< TextView
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "testview 2" />
</ LinearLayout >
</ FrameLayout >
</ LinearLayout >
</ TabHost >
xmlns:tools = "http://schemas.android.com/tools"
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 = "match_parent"
android:layout_height = "match_parent" >
< TextView
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "testview" />
< TextView
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "testview 2" />
</ LinearLayout >
< LinearLayout
android:id = "@+id/tab02"
android:orientation = "vertical"
android:layout_width = "match_parent"
android:layout_height = "match_parent" >
< TextView
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "testview" />
< TextView
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "testview 2" />
</ LinearLayout >
< LinearLayout
android:id = "@+id/tab03"
android:orientation = "vertical"
android:layout_width = "match_parent"
android:layout_height = "match_parent" >
< TextView
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "testview" />
< TextView
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "testview 2" />
</ LinearLayout >
</ FrameLayout >
</ LinearLayout >
</ TabHost >
Java代码:
public
class
MainActivity
extends
TabActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_main );
TabHost tabHost = getTabHost();
TabSpec tab1 = tabHost.newTabSpec( "tab1" )
.setIndicator( "Accepted" )
.setContent(R.id. tab01 );
tabHost.addTab(tab1);
TabSpec tab2 = tabHost.newTabSpec( "tab2" )
.setIndicator( "Called" ,getResources().getDrawable(R.drawable. ic_launcher ))
.setContent(R.id. tab02 );
tabHost.addTab(tab2);
TabSpec tab3 = tabHost.newTabSpec( "tab3" )
.setIndicator( "Missed" )
.setContent(R.id. tab03 );
tabHost.addTab(tab3);
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_main );
TabHost tabHost = getTabHost();
TabSpec tab1 = tabHost.newTabSpec( "tab1" )
.setIndicator( "Accepted" )
.setContent(R.id. tab01 );
tabHost.addTab(tab1);
TabSpec tab2 = tabHost.newTabSpec( "tab2" )
.setIndicator( "Called" ,getResources().getDrawable(R.drawable. ic_launcher ))
.setContent(R.id. tab02 );
tabHost.addTab(tab2);
TabSpec tab3 = tabHost.newTabSpec( "tab3" )
.setIndicator( "Missed" )
.setContent(R.id. tab03 );
tabHost.addTab(tab3);
}
}
2.8.7 ScrollView
由FrameLayout派生,作用是为普通组件添加滚动条,ScrollView只能包含一个组件。
ScrollView只能为应用添加垂直滚动条,若想添加水平滚动条,需借助HorizontalScrollView实现
示例代码:(TextView的内容必须使屏幕显示不下~~)
<
ScrollView
xmlns:android
=
"http://schemas.android.com/apk/res/android"
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent" >
< HorizontalScrollView
android:layout_width = "match_parent"
android:layout_height = "wrap_content" >
< LinearLayout
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:orientation = "vertical" >
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent" >
< HorizontalScrollView
android:layout_width = "match_parent"
android:layout_height = "wrap_content" >
< LinearLayout
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:orientation = "vertical" >
<!— 众多TextView 定义省略 -->
</
LinearLayout
>
</ HorizontalScrollView >
</ HorizontalScrollView >
</
ScrollView
>
2.8.8 Notification
通知,即显示在手机状态栏的状态。Notification所代表的是一种具有全局效果的通知,程序一般通过NotificationManage服务来发送Notification
Android3.0 增加了Notification.Builder类,提供了如下常用方法
setDefaults()
|
设置通知LED灯、音乐、振动
|
setAutoCancel()
|
设置点击通知后,状态栏自动删除
|
setContentTitle()
|
设置通知图标
|
setContentText()
|
设置通知内容
|
setSmallIcon()
|
设置通知图标
|
setTick()
|
设置在状态栏的提示文本
|
setContentIntent()
|
设置点击通知后要启动的程序对应的PendingIntent
|
发送Notification的步骤如下:
- 调用getSystemService(NOTIFICATION_SERVICE)方法获取系统的NotificationManager服务
- 通过构造器设置各种属性
- 为Notification设置各种属性
- 通过NotificationManager发送Notification
示例代码:
public
class
MainActivity
extends
ActionBarActivity {
static final int NOTIFICATION_ID = 0X123;
NotificationManager nm ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_main );
nm = (NotificationManager)
getSystemService( NOTIFICATION_SERVICE );
}
public void send(View source)
{
Intent intent = new Intent(MainActivity. this , OtherActivity. class );
PendingIntent pi = PendingIntent.getActivity(MainActivity. this , 0, intent, 0);
Notification notify = new Notification.Builder( this )
.setAutoCancel( true )
.setTicker( "MSG" )
.setSmallIcon(R.drawable. ic_launcher )
.setContentTitle( "a new message" )
.setContentText( "congratulations, you have passed our test" )
// .setDefault(Notification.DEFAULT_SOUND)
// .setSound()
.setWhen(System.currentTimeMillis())
.setContentIntent(pi)
.build();
nm .notify( NOTIFICATION_ID , notify);
}
public void del(View v)
{
nm .cancel( NOTIFICATION_ID );
static final int NOTIFICATION_ID = 0X123;
NotificationManager nm ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_main );
nm = (NotificationManager)
getSystemService( NOTIFICATION_SERVICE );
}
public void send(View source)
{
Intent intent = new Intent(MainActivity. this , OtherActivity. class );
PendingIntent pi = PendingIntent.getActivity(MainActivity. this , 0, intent, 0);
Notification notify = new Notification.Builder( this )
.setAutoCancel( true )
.setTicker( "MSG" )
.setSmallIcon(R.drawable. ic_launcher )
.setContentTitle( "a new message" )
.setContentText( "congratulations, you have passed our test" )
// .setDefault(Notification.DEFAULT_SOUND)
// .setSound()
.setWhen(System.currentTimeMillis())
.setContentIntent(pi)
.build();
nm .notify( NOTIFICATION_ID , notify);
}
public void del(View v)
{
nm .cancel( NOTIFICATION_ID );
}
}
main.xml代码:
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
android:orientation = "horizontal"
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
android:gravity = "center_horizontal"
>
< Button
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "发送Notification"
android:onClick = "send"
/>
< Button
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "删除Notification"
android:onClick = "del"
/>
</ LinearLayout >
< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
android:orientation = "horizontal"
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
android:gravity = "center_horizontal"
>
< Button
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "发送Notification"
android:onClick = "send"
/>
< Button
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "删除Notification"
android:onClick = "del"
/>
</ LinearLayout >