Chapter 05 高级UI组件
本章介绍Android开发常用的一些高级UI组件,主要包括列表类组件、切换类组件以及通用组件。本章主要学习一些可以滑动的列表或是切换类的组件,通过此类组件可以实现动态UI界面的效果。
5.1 列表类组件
在Android中提供了两种列表类组件:一种是下拉列表框,通常用于弹出一个下拉菜单供用户选择,用Spinner表示;另一种是列表视图,通常用于实现在一个窗口中只显示一个列表,使用ListView表示。
5.1.1 下拉列表框
Android中提供的下拉列表框(Spinner)通常用于提供一系列列表项供用户进行选择。例如,豆瓣网搜索界面中的搜索类型的下拉列表框。
在Android中,在XML布局文件中通过标记添加下拉列表框,基本语法格式如下:
<Spinner
android:entries="@array/数组名称"
android:prompt="@string/info"
其他属性
>
</Spinner>
其中,android:entries为可选属性,用于指定列表项,如果在布局文件中不指定该属性,可以在java代码中通过为其指定适配器的方式指定;android:prompt属性也是可选属性,用于指定下拉列表框的标题。
通常情况下,如果下拉列表框中要显示的列表行是可知的,那么将其保存在数组资源文件中,然后通过数组资源为下拉列表框指定列表项。这样,就可以在不编写Java代码中的情况下实现一个下拉列表框。下面将通过一个小例子(豆瓣网搜索下拉列表框)进行演示,说明如何在不编写Java打码的情况下,在屏幕中添加下拉列表项。
例子:豆瓣网下拉列表框:
(1)布局文件activity_main.xml内容如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:background="@mipmap/xila"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Spinner
android:id="@+id/spinner"
android:entries="@array/ctype"
android:layout_width="wrap_content"
android:layout_height="75dp" />
<EditText
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginRight="10dp"
android:hint="搜索"
android:textColor="#F8F8FF"/>
</LinearLayout>
<TextView
android:id="@+id/notice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginBottom="100dp"
android:background="#22000000"
android:textSize="24sp"/>
</RelativeLayout>
(2)编写用于指定列表行的数组资源文件,并将其保存在res\values目录中,这里将其命名为arrays.xml,在该文件中添加一个字符串数组,名称为ctype,内容如下:
resources>
<string-array name="ctype">
<item>全部</item>
<item>电影/电视</item>
<item>图书</item>
<item>唱片</item>
<item>小事</item>
<item>用户</item>
<item>小组</item>
<item>群聊</item>
<item>游戏/应用</item>
<item>活动</item>
</string-array>
</resources>
(3)主活动MainActivity.java内容如下:
public class MainActivity extends AppCompatActivity {
Spinner spinner;
TextView notice;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spinner = findViewById(R.id.spinner);
notice = findViewById(R.id.notice);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
//获取选择项的值
String result = parent.getItemAtPosition(position).toString();
//显示被选中的值
notice.setText(result);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
}
在使用下拉列表框时,如果不在布局文件中直接为其指定要显示的列表项,也可以通过为其指定适配器的方式指定。下面仍然以上述豆瓣网搜索页面例子介绍通过指定适配器的方式指定列表项的方法。
为下拉列表框指定适配器,通常分为一下3个步骤:
(1)创建一个适配器对象,通常使用ArrayAdapter类。首先需要创建一个一维的字符串数组用于保存要显示的列表项,然后使用ArrayAdapter类的构造方法ArrayAdapter(Context context, int textViewResourceId, T[] objects)实例化一个ArrayAdapter类的实例,具体代码如下:
String[] ctype = new String[] {
"全部", "电影", "图片", "唱片", "小事",
"用户", "小组", "群聊", "游戏", "活动"
};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item);
(2)为适配器设置列表框下拉时的选项样式,具体代码如下:
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
(3)将适配器与下拉列表框关联,具体代码如下:
spinner.setAdapter(adapter);
5.1.2 列表视图
列表视图(ListView)是Android中最常用的一种视图,它以垂直列表的形式列出需要显示的列表项。例如,卫星通讯界面中的联系人列表,以及QQ的图片浏览设置界面。
在Android中,可以通过在XML布局文件中使用<ListView>标记添加列表视图,其基本语法格式如下:
<ListView
属性列表
>
</ListView>
ListView组件支持的常用的XML属性如下表所示:
XML属性 | 描述 |
---|---|
android:divider | 用于为列表视图设置为分隔条,既可以用颜色分割,也可以用Drawable资源分隔 |
android:dividerHeight | 用于设置分隔条的高度 |
android:entries | 用于通过数组资源位ListView指定列表项 |
android:footerDividersEnable | 用于设置是否在footer View(底部视图 |