Android--高级组件
进度条(ProgressBar)
作用:应当在后台执行时,前台界面不会有任何信息,这时用户根本不知道程序是否在执行,以及执行进度,因此要用进度条来 提示 程序执行的进度 在Android中使用ProgressBar表示 用于用户显示某个耗时操作完成的百分比
横向样式
圆形样式
XML中配置:
“?”表示不确定的选项
<ProgressBar style="?android:attr/progressBarStyleHorizontal" android:layout_width="fill_parent" android:layout_height="50dp" android:visibility="gone"/>
常用属性
android:max 设置进度条的最大值 android:progress 用于指定进度条的已完成的进度值android:progressDrawable 用于设置进度条的轨道绘制形式
Style属性
?android:attr/progressBarStyleHorizontal 细水平长条进度条?android:attr/progressBarStyleLarge 大圆形进度条?android:attr/progressBarStyleSmall 小圆形进度条@android:style/Widget.ProgressBar.Large 大跳跃,旋转画面的进度条@android:style/Widget.ProgressBar.Small 小跳跃,旋转画面的进度条@android:style/Widget.ProgressBar.Horizontal 粗水平长条进度条
ProgressBar的水平样式中自身是不会动的,必须在代码中设置进度才会改变
public synchronized void setProgress(int progress)//进度设置
一般能知道具体操作时间的使用水平,比如复制文件,而有些不知道操作时间的使用圆
形进度条,如请求网络。
ProgressBar是在前台提示用户,而执行任务一般都是后台,但是安卓不允许后台线程直
接操作UI,所以,我们一般在需要处理UI时,需要通知主线程,
在Activity中,可以先使用runOnUiThread来操作主线程
子线程操作UI
runOnUiThread(new Runnable(){@Override public void run(){ progressBar.setProgress(index); }});
初识Thread+Handler
在子线程中如果需要更新UI ,也可以使用Handler在子线程中发消息给主线程,然后让主线程来刷新
new Thread(){ @Override public void run(){ super.run(); //处理更新逻辑 //提交更新内容 Message m = new Message(); m.whit=1; m.obj = progress; } }.start(); //主线程接收消息,更新内容 private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); //主线程解析收到的内容 if(msg.what==1){ int progress = (Integer)msg.obj; mProgressBar.setProgress(progress); } } };
拖动条(SeekBar)
拖动条和进度条类似,不同的是拖动条允许用户来拖动滑块来改变值,通常用于实现对某个数值的调节,例如:调节图片的透明度或者音量等
XML中设置:
"@+id/seekBar1" android:layout_width="match_parent" android:layout_height="wrap_content" android:max="100" android:padding="10px" android:progress="50" />
常用属性:
android:max="100" 进度条的最大值android:padding="10px" 进度条的边距android:progress="50" 进度条的初始值
监听事件:
//监听拖动条值变化事件 seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){ @Override public void onStopTrackingTouch(SeekBar seekBar){ //当用户停止拖动时 } @Override public void onStarTrachingTouch(SeekBar seekBar){ //当用户开始拖动时 } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser ){ //当进度改变时 //progress代表改变的进度值 //而fromUser代表是否是用户的操作改变的,如果为false,一般是我们 代码中进行了进度设置。 } });
星级评分条(RatingBar)
星级评分条志拖动条类似,都允许用户拖动来改变进度,所不同的是,星级评分条通过星星显示进
度.通常情况下.使用星级评分条表示对某一事务的支持度或是对某种服务的满意程度,如淘宝网
中对卖家的好评度
XML配置:
<RatingBar android:id="@+id/myRatingBar" android:layout_width="match_parent" android:numStars="5" android:rating="2.5" android:isIndicator="true" android:stepSize="0.5" android:layout_height="wrap_content"/>
常用属性
android:numStars="5" //指定星级评分条有多少颗星android:rating="2.5" //默认有多少个星android:isIndicator="true" //指定星级评分条是否允许用户改变,true为不改变android:stepSize="0.5" //指定每次需要改变多少个星星,默认为0.5
监听事件
//监听评分条值变化事件 batingBar.setOnRatingBarChangeListener(newOnRatingBarChangeListener() { @Override public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { //同ProgressBar } });
滚动视图(ScrollView)
滚动视图用于为其他组件添加滚动条,在默认的情况下,当窗体中内容比较多,而一屏幕不能显示时,超出的部分不能被用户看到,因为Android的布局管理器本身没有提供滚动屏幕的功能,如果想要滚动,就要用到滚动视图ScrollView
滚动视图是FrameLayout的子类,因此,在滚动视图中,可以添加任何想要添加的组件,但是一个滚动视图中只能放一个组件,如果想要放入多个,可以先放一个布局管理器,再将要放置的组件放入该布局管理器中,在滚动视图中,使用比较多的是线性布局管理器
XML配置:
<ScrollView android:id="@+id/scrollView" android:layout_width="match_parent" android:layout_height="wrap_content"><ScrollView/>
水平滚动视图
HorizontalScrollView和ScrollView差不多,只是滚动方式为横向
XML配置:
<HorizontalScrollView android:layout_width="match_parent" android:lauout_height=wrap_content"><HorizontalScrollView/>
自动完成文本框(AutoCompleteTextView)
在输入框中输入我们想要输入的信息就会弹出与其相关的信息,这种效果在Android中是用AutoCompleteTextView来实现的
AutoCompleteTextView继承与EditText,拥有EditText所有的属性和方法
XML配置:
<AutoCompleteTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" android:completionThreshold="2"/>
常用属性
android:completionHint 用于弹出下拉菜单指定提示标题android:completionThreshold 用于指定用户至少输入几个字符才会显示提示android:dropDownHeight 用于指定下拉菜单的高度android:dropDownHorizontalOffset 用于指定下拉腰间与文本之间的水平偏移.下拉腰间默认与文本左对齐android:dropDownVerticalOffset 用于指定下拉腰间与文本之间的垂直领衔.下拉菜单默认紧跟文本框android:dropDownWidth 用于指定下拉菜单的宽度android:popupBackground 用于为下拉菜单设置背景
AutoCompleteTextView组件必须设置数据,一般是字符串数组,而我们需要将视图和数据组装起来,这时就需要适配器了
使用setAdapter(adapter)方法传入适配器
适配器Adapter类
Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带。在常见的View(ListView,GridView)等地方都需要用到适配器Adapter
类图结构如下
图中可以看出在Android和Adapter有关的所有接口,类的层级图。在我们使用过程中可以根据自己的需求实现接口或者继承类进行拓展,比较常用的适配器有:
BaseAdapter, SimpleAdapter,ArrayAdapter,SimpleCursorAdapter等
BaseAdapter是一个抽象类,继承它需要实现较多的方法,所有也具有较高的灵活性ArrayAdapter 支持泛型操作,最为简单,只能拓展一行字。SimpleAdapter 有最好的拓展性,可以自定义出各种效果。SimpleCursorAdapter可以适用于简单的纯文字型ListView,它需要Cursor的字段和UI的id对应起来。如需要实现更复杂的UI也可以重写其他方法。可以认为是SimpleAdapter对数据库的简单结合,可以方便地把数据库的内容以列表的形式展示出来。
ArrayAdapter类
ArrayAdapter通常用于将数组或者List集合的多个值包装成多个列表项
ArrayAdapter有六种构造方法,如果只是搭配简单的视图,一般使用下面这种构造方法
public ArrayAdapter(Context context,int resource,inttextViewResourceId, List objects) //context 代表上下文,一般传入的是当前的Activity //resource 代表布局资源,传入你需要的布局文件,一般直接使用 android.R.layout.simple_list_item_1,这个布局中包含一个TextView //textViewResourceId代表的是resourece布局中的TextView的Id号,使用系统布局时传入android.R.id.text1 //其中T代表泛型,数组和集合中就是我们的数据
自动完成文本框(MultiAutoCompleteTextView)
一个继承自AutoCompleteTextView的可编辑的文本视图,能够对用户键入的文本进行有效
地扩充提示,而不需要用户输入整个内容。它和AutoCompleteTextView不同就是能处理多
个输入的字段,如发送短信界面的联系人列表,同时能编辑多个联系人,并且能够提示。
XML配置:
<MultiAutoCompleteTextView android:layout_width="match_parent" android:layout_height="wrap_content"><MultiAutoCompleteTextView/>
用户必须提供一个MultiAutoCompleteTextView.Tokenizer用来区分不同的子串
分隔符:
multiAutoCompleteTextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());//CommaTokenzier使用‘,号’来区分
列表选择框(spinner)
Spinner是一个下拉列表,通常用于选择一系列可选择的列表项,它可以用于适配器,也可以直接设置数组资源
XML配置:
"match_parent" android:layout_height="wrap_content" android:entries="@array/ctype"/> //设置数组源
选中默认值:
spinner.setSelection(2,true);默认选中值
监听事件:
spinner.setOnitemSelectedListener(new OnItemSelectedListener(){ @Override public void onItemSelected(AdapterView<?>parent,View view,int position,long id){ //当用户选择其中一项时 } @Override public void onNothingSelected(AdapterView<?> parent) { //当没有任何选择时 }});
它也可以设置适配器作为数据源,如果下拉列表中并不止一个TextView显示文本,那么就需
要设置适配器,但是一般下拉列表都只需要一个文本。
spinner.setAdapter(adapter);
如果需要多个组件值都需要改变,那么一般使用SimpleAdapter类
SimpleAdapter类
SimpleAdapter是扩展性最好的适配器,可以定义各种你想要的布局
构造方法:
SimpleAdapter(Context context, List<? extends Map<String, ?>> data, intresource, String[] from, int[] to) 参数context:上下文,比如this。关联SimpleAdapter运行的视图上下文 参数data:Map列表,列表要显示的数据,这部分需要自己实现,类型要与上面的一致,每条项目要与from中指定条目一致 参数resource:ListView单项布局文件的Id,这个布局就是你自定义的布局了,你想显示什么样子的布局都在这个布局中。这个布局中必须包括了to中定义的控件id 参数 from:一个被添加到Map上关联每一个项目列名称的列表,数组里面是列名称 参数 to:是一个int数组,数组里面的id是自定义布局中各个控件的id,需要与上面的from对应
列表视图(ListView)
ListView是android中最重要的一种视图,基本是个软件都会用到ListView 它以垂直列表的形式表现出来,只有通过Adapter才可以把列表中的数据映射到ListView中
列表显示需要3个元素
- ListView 用来展示列表的View
- 适配器用来把数据映射到ListView上的中介
- 数据具体的将被映射的字符串,图片,或者基本组件
XML配置:
<ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:entries="@array/ctype"><ListView/>
常用属性:
android:divider 用于为列表视力设置分隔条,可以用颜色分隔,也可以用Drawable资源分隔android:dividerHeight 用于设置分割条的高度android:entries 列表的数据源android:headerDividersEnabled 用于设置是否在headerView之后绘制分隔条, 默认值为true,设置为false時,表示不会绘制, 使用该属性时需要通过LiswView组件提供的 addHeaderView()方法为ListView设置headerView
监听事件:
listView.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //其中position为当前点击的列表位置 } });
系统内置布局:
android.R.layout.simple_list_item_multiple_choice: 每个列表项目都带多选框文本 android.R.layout.simple_list_item_1 每个列表项都是一个普通的文本 android.R.layout.simple_list_item_2 每个列表项都是一个普通的文本(字体略大) android.R.layout.simple_list_item_checked 每个列表项都有一个已勾选的列表项 android.R.layout.simple_list_item_single_choice 每个列表项都是带单选按钮的文本
在List列表中如果不存在过于复杂的东西,我们可以直接使用ArrayAdapter来绘制列表。但是如果列表中过于复杂的话就需要使用自定义布局来实现List列表。用ListView使用上面的SimpleAdapter,并显示出内容。ListView常用的适配器是BaseAdapter,它本身是一个抽象类,实现了ListAdapter和SpinnerAdapter,并且是ArrayAdapter和SimpleAdapter的父类,我们通过它可以更加随心的定制各种视图。
与君共勉
我要一步一步往上爬
在最高点乘着叶片往前飞
任风吹干流过的泪和汗
我要一步一步往上爬
等待阳光静静看着它的脸
小小的天有大大的梦想
我有属于我的天
任风吹干流过的泪和汗
总有一天我有属于我的天
更多相关文章
- Android(安卓)- 主要的UI元素
- 如何创建QuickAction在Android对话 类似于苹果的效果
- Android(安卓)VR Player(全景视频播放器) [6]:视频列表的实现-本地
- Android(安卓)View视图绘制
- 移动安全-java JEB安装使用
- android EditText中inputType的属性列表
- android事件拦截处理机制详解
- Android中MVP模式
- 【Android(安卓)P】 JobScheduler服务源码解析(三)—— 使用Job需