学习过基础的较常用的组件,现在我们要向更多更高的知识出发,所以下面来讲讲Android中的高级界面组件。
(1)前面我们学习过TextView和EditText,关于文本不只是有那些基础组件,也有高级组件AutoCompleteTextView(自动完成文本框),他是从EditText下面派生出来的,但是呢?他比普通的编辑框多了个功能,就是当用户输入一定的字符之后,它会出现一个下拉菜单让用户选择,当用户选择其中的某个菜单项就回按用户选择的自动填写该文本框。这些我们在各大搜索框时会看到,最常见的当然就是百度一下,你就知道。那么他是怎么实现的呢?
首先,我们当然是要写一个它的布局文件,例如:
<!-- 自动完成文本框,其中completionHint属性是指下拉菜单中的提示标题 completionThreshold属性是指用户至少输入几个字符才显示,这里设置为1个, dropDownVertical(Horizontal)代表下拉菜单与文本框之间的垂直(水平)偏移,因为默认是紧跟(左对齐), dropDownWidth(Height)则是下拉菜单的宽(高) --> <AutoCompleteTextView android:id="@+id/actv_test" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginRight="50dp" android:completionHint="@string/auto_text" android:completionThreshold="1" android:dropDownHorizontalOffset="5dp" android:dropDownVerticalOffset="2dp" android:dropDownWidth="200dp" android:dropDownHeight="300dp" />然后在Activity里面为他定义一个字符串数组作为提示文本,并且创建一个适配器封装该数组,主要代码如下:
String[] starNames = new String[] { "邓紫棋", "邓丽君", "邓超" }; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.search_layout); ArrayAdapter<String> auto = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, starNames); AutoCompleteTextView actv = (AutoCompleteTextView) findViewById(R.id.actv_test); actv.setAdapter(auto); }然后我们运行手机会得到下面这个界面:
(2)同样的,在前面我们学习了时间的基础组件包括AnalogClock赫尔DigitalClock,可是我们发现这两个基础组件通常是和时间选择器在一块的,也就是Android里面的DatePicker(日期选择器)和TimePicker(时间选择器),那么这两个选择器是怎样实现选择的呢?这就要说到DatePicker的OnDateChangeListener和TimePicker的OnTimeChangeListener这两个监听器。
<TimePicker android:id="@+id/tp_test" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" /> <TextView android:id="@+id/tv_time_show" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal"/>上面就是时间选择器的布局文件,TextView是用来显示我们选择的时间信息的,主要代码如下:
TimePicker tpPicker = (TimePicker) findViewById(R.id.tp_test); tvTimeShow = (TextView) findViewById(R.id.tv_time_show); Calendar c = Calendar.getInstance(); hour = c.get(Calendar.HOUR); minute = c.get(Calendar.MINUTE); tpPicker.setOnTimeChangedListener(new OnTimeChangedListener() { @Override public void onTimeChanged(TimePicker arg0, int hour, int minute) { TimeActivity.this.hour = hour; TimeActivity.this.minute = minute; tvTimeShow.setText("选择的时间是" + hour+ "时" + minute + "分"); } });同样地,日期选择器的布局文件和主要代码如下:
<DatePicker android:id="@+id/dp_test" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal"/> <TextView android:id="@+id/tv_date_show" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal"/>
DatePicker dpPicker = (DatePicker) findViewById(R.id.dp_test); tvDateShow = (TextView) findViewById(R.id.tv_date_show); Calendar c = Calendar.getInstance(); year = c.get(Calendar.YEAR); month = c.get(Calendar.MONTH); day = c.get(Calendar.DAY_OF_MONTH); dpPicker.init(year, month, day, new OnDateChangedListener() { @Override public void onDateChanged(DatePicker arg0, int year, int month, int day) { DateActivity.this.year = year; DateActivity.this.month = month; DateActivity.this.day = day; tvDateShow.setText("选择的日期是" + year + "年" + month + "月" + day + "日"); } });具体的页面显示如下:
如上图所示,我们使用这两个选择器时就会显示我们选择后的日期和时间信息。再进一步学习的话,我们也可以结合之前的时钟做一个类手机自带的时间显示App了。