Android开发实践 界面编程(中)
本篇将开始Android开发实践 界面编程(中)的旅程。
1.UI组件-AdapterView及其子类(中)
1)自动完成文本框(AutoCompleteTextView)的用法
MultiAutoCompleteTextView是AutoCompleteTextView派生的子类,MultiAutoCompleteTextView允许输入多个提示项,多个提示项以分隔符分隔。下面简单演示AutoCompleteTextView和MultiAutoCompleteTextView的用法:
main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent" ><!-- 定义一个自动完成文本框,指定输入一个字符后进行提示 --><AutoCompleteTextView android:id="@+id/auto"android:layout_width="fill_parent" android:layout_height="wrap_content" android:completionHint="请选择:"android:dropDownHorizontalOffset="10dp"android:completionThreshold="1"/><!-- 定义一个MultiAutoCompleteTextView组件 --><MultiAutoCompleteTextViewandroid:id="@+id/mauto"android:layout_width="fill_parent"android:layout_height="wrap_content"android:completionThreshold="1"/></LinearLayout>AutoCompleteTextViewTest.java
public class AutoCompleteTextViewTest extends Activity {AutoCompleteTextView auto;MultiAutoCompleteTextView mauto;String[] str = new String[]{"aa","ab","ac",};@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);// 创建ArrayAdapter对象ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, str);auto = (AutoCompleteTextView)findViewById(R.id.auto);auto.setAdapter(adapter);mauto = (MultiAutoCompleteTextView)findViewById(R.id.mauto);mauto.setAdapter(adapter);// 为MultiAutoCompleteTextView设置分隔符mauto.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());}}
运行如上代码的效果如下图:
2)网格视图(GridView)的用法
GridView与ListView的唯一区别就是ListView只显示一列,GridView可显示多列。GridView常用的XML属性如下:
android:columnWidth=""设置列的宽度android:numColumns=""设置列数android:gravity="" 设置对齐方式android:verticalSpacing=""设置各元素之间的垂直距离android:horizontalSpacing=""设置各元素之间的水平距离android:stretchMode=""设置拉伸模式GridView的Adapter写法参考ListView。
3)其他
本部分组件只给出演示效果,具体使用方法可以查阅官方文档。
可展开的列表组件(ExpandableListView)
弹出菜单供用户选择(Spinner)
画廊视图(Gallery)
使用AdapterViewFlipper实现自动播放图片
StackView实现以“堆叠”方式来显示多个列表项
2.UI组件-ProgressBar及其子类
1)ProgressBar的用法
ProgressBar代表了进度条组件,通常用于显示某个耗时操作完成百分比,ProgressBar及其子类类图如下:
ProgressBar的风格可以通过style属性设置,该属性有如下几个属性值:
<!-- 定义一个大环形进度条 --><ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content"style="@android:style/Widget.ProgressBar.Large" /><!-- 定义一个中等大小的环形进度条 --><ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" />style="@android:style/Widget.ProgressBar.Small"定义一个小环形进度条style="@android:style/Widget.ProgressBar.Horizontal"定义一个水平进度条style="@android:style/Widget.ProgressBar.Horizontal" 定义一个水平进度条,并改变轨道外观ProgressBar常用的XML属性如下:
android:max="100"设置进度条的最大值android:progress=""设置进度条已完成进度值android:progressDrawable="@drawable/.."设置进度条的轨道对应的Drawable对象android:indeterminate=""true表示设置进度条不精确显示进度android:indeterminateDrawable=""设置绘制不显示进度的进度条的Drawable对象android:indeterminateDuration=""设置不精确显示进度的持续时间
2)拖动条(SeekBar)的用法
SeekBar的应用比较少(典型应用有拖动调节音量等),SeekBar的用法请查阅官方文档。
3)星级评分条(RatingBar)的用法
RatingBar和SeekBar十分相似,它们最大区别在于RatingBar通过星星来表示进度,RatingBar的用法请查阅官方文档。
3.UI组件-ViewAnimator及其子类
ViewSwitcher:视图切换组件,可实现分屏、左右滚动的效果。
ImageSwitcher:图像切换器,可在切换View组件时使用动画效果。
TextSwitcher:文本切换器,可在切换View组件时使用动画效果,与ImageSwitcher不同的是TextSwitcher所需的ViewFactory的makeView()方法必须返回一个TextView组件;TextSwitcher和TextView功能相似,都可以显示文本内容,区别在于TextSwitcher可指定文本切换时的动画效果。
4.对话框
Android提供了4种常用的对话框:
AlertDialog:功能最丰富、实际应用最广泛的对话框
ProgressDialog:进度对话框
DatePickerDialog:日期选择对话框
TimePickerDialog:时间选择对话框
1)使用AlertDialog创建对话框
AlertDialog提供了如下6种方法来指定对话框的内容:
setMessage()设置对话框内容为简单文本内容setItems()设置对话框内容为简单列表项setSingleChoiceItems()设置对话框内容为单选列表项setMultiChoiceItems()设置对话框内容为多选列表项setAdapter()设置对话框内容为自定义列表项setView()设置对话框内容为自定义View下面来看看AlertDialog的具体用法:
1-1)显示提示消息的对话框
/** * 简单对话框点击事件 * @param view */public void simpleDialog(View view) {new AlertDialog.Builder(this).setTitle("简单对话框") // 设置对话框标题.setIcon(R.drawable.tools) // 设置图标.setCancelable(false) // 设置点击Dialog以外的界面不消失,按返回键也不起作用//.setCanceledOnTouchOutside(false); // 设置点击Dialog以外的界面不消失,按返回键还起作用.setMessage("确定退出吗?").setPositiveButton("确定", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(getApplicationContext(), "单击了确定按钮!", 0).show();}}).setNegativeButton("取消", null).create().show();}效果图:
2)使用ProgressDialog创建对话框
2-1)环形进度条
public void showSpinner(View view) {// 调用静态方法显示环形进度条ProgressDialog.show(this, "任务执行中", "任务执行中,请等待", false, true); }效果图:
2-2)显示进度的进度条
public class ProgressDialogTest extends Activity {final static int MAX_PROGRESS = 100;private int[] data = new int[50]; // 该程序模拟填充长度为100的数组int progressStatus = 0; // 记录进度对话框的完成百分比int hasData = 0;ProgressDialog pd;/** * 定义一个负责更新的进度的Handler */Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {// 表明消息是由该程序发送的if (msg.what == 0) {pd.setProgress(progressStatus);}}};@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);}/** * 显示进度的进度条的点击事件 * @param source */public void showProgress(View source) {progressStatus = 0; // 将进度条的完成进度重设为0hasData = 0; // 重新开始填充数组pd = new ProgressDialog(ProgressDialogTest.this);pd.setMax(MAX_PROGRESS);pd.setTitle("任务完成百分比"); // 设置对话框的标题pd.setMessage("耗时任务的完成百分比"); // 设置对话框 显示的内容pd.setCancelable(false); // 设置对话框不能用“取消”按钮关闭pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); // 设置对话框的进度条风格pd.setIndeterminate(false); // 设置对话框的进度条是否显示进度pd.show(); new Thread() {public void run() {while (progressStatus < MAX_PROGRESS) {progressStatus = MAX_PROGRESS * doWork() / data.length; // 获取耗时操作的完成百分比handler.sendEmptyMessage(0); // 发送空消息到Handler}// 如果任务已经完成if (progressStatus >= MAX_PROGRESS) {// 关闭对话框pd.dismiss();}}}.start();}/** * 模拟一个耗时的操作 * @return */public int doWork() {data[hasData++] = (int) (Math.random() * 100); // 为数组元素赋值try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}return hasData;}}效果图:
5.菜单
Android系统的菜单支持类图如下:
ContextMenu:上下文菜单
SubMenu:子菜单
MenuItem:菜单项
1)使用PopupMenu创建仿微信弹出式菜单
PopupMenuTest.java
public class PopupMenuTest extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);}PopupMenu popup = null;/** * 弹出式菜单的点击事件 * @param button */public void onPopupButtonClick(View button) {popup = new PopupMenu(this, button); // 创建PopupMenu对象// 将R.menu.popup_menu菜单资源加载到popup菜单中getMenuInflater().inflate(R.menu.popup_menu, popup.getMenu());// 为popup菜单的菜单项单击事件绑定事件监听器popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {@Overridepublic boolean onMenuItemClick(MenuItem item) {switch (item.getItemId()) {case R.id.item1:// 隐藏该对话框popup.dismiss();break;default:// 使用Toast显示用户点击的菜单项Toast.makeText(PopupMenuTest.this, "您单击了" + item.getTitle() + "菜单项", 0).show();}return true;}});popup.show();}}其中res/menu/popup_menu.xml为
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/item1" android:icon="@android:drawable/ic_menu_search" android:textSize="16sp" android:title="发起群聊"/> <item android:id="@+id/item2" android:icon="@android:drawable/ic_menu_add" android:textSize="16sp" android:title="添加朋友"/> <item android:id="@+id/item3" android:textSize="16sp" android:title="扫一扫"/> <item android:id="@+id/item4" android:textSize="16sp" android:title="收付款"/></menu>
styles.xml如下
<resources> <!-- Application theme. --> <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"></style></resources>
运行后效果图如下:
更多相关文章
- Android——最新LitePal使用
- fitsSystemWindows的理解与沉浸式状态栏实现
- android
- Android(安卓)应用语言设置的实现
- 一个不错的启动菜单显示屏动画效果
- 【Android】OpenGL ES for Android(安卓)教程1 - HelloWorld
- android 权限大全
- Android幻灯片式图片浏览器
- 【Android】ToolBar设置NavigationIcon不显示异常或自定义失败异