作用:应当在后台执行时,前台界面不会有任何信息,这时用户根本不知道程序是否在执行,以及执行进度,因此要用进度条来 提示 程序执行的进度 在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 用于设置进度条的轨道绘制形式
?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);
}
});
在子线程中如果需要更新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);
}
}
};
拖动条和进度条类似,不同的是拖动条允许用户来拖动滑块来改变值,通常用于实现对某个数值的调节,例如:调节图片的透明度或者音量等
"@+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 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(new
OnRatingBarChangeListener() {
@Override
public void onRatingChanged(RatingBar ratingBar, float rating,
boolean fromUser) {
//同ProgressBar
}
});
滚动视图用于为其他组件添加滚动条,在默认的情况下,当窗体中内容比较多,而一屏幕不能显示时,超出的部分不能被用户看到,因为Android的布局管理器本身没有提供滚动屏幕的功能,如果想要滚动,就要用到滚动视图ScrollView
滚动视图是FrameLayout的子类,因此,在滚动视图中,可以添加任何想要添加的组件,但是一个滚动视图中只能放一个组件,如果想要放入多个,可以先放一个布局管理器,再将要放置的组件放入该布局管理器中,在滚动视图中,使用比较多的是线性布局管理器
<ScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ScrollView/>
HorizontalScrollView和ScrollView差不多,只是滚动方式为横向
<HorizontalScrollView
android:layout_width="match_parent"
android:lauout_height=wrap_content">
<HorizontalScrollView/>
在输入框中输入我们想要输入的信息就会弹出与其相关的信息,这种效果在Android中是用AutoCompleteTextView来实现的
AutoCompleteTextView继承与EditText,拥有EditText所有的属性和方法
<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是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带。在常见的View(ListView,GridView)等地方都需要用到适配器Adapter
图中可以看出在Android和Adapter有关的所有接口,类的层级图。在我们使用过程中可以根据自己的需求实现接口或者继承类进行拓展,比较常用的适配器有:
BaseAdapter, SimpleAdapter,ArrayAdapter,SimpleCursorAdapter等
BaseAdapter是一个抽象类,继承它需要实现较多的方法,所有也具有较高的灵活性
ArrayAdapter 支持泛型操作,最为简单,只能拓展一行字。
SimpleAdapter 有最好的拓展性,可以自定义出各种效果。
SimpleCursorAdapter可以适用于简单的纯文字型ListView,它需要Cursor的字段和UI的
id对应起来。如需要实现更复杂的UI也可以重写其他方法。可以认为是SimpleAdapter对
数据库的简单结合,可以方便地把数据库的内容以列表的形式展示出来。
ArrayAdapter通常用于将数组或者List集合的多个值包装成多个列表项
ArrayAdapter有六种构造方法,如果只是搭配简单的视图,一般使用下面这种构造方法
public ArrayAdapter(Context context,int resource,int
textViewResourceId, List objects)
//context 代表上下文,一般传入的是当前的Activity
//resource 代表布局资源,传入你需要的布局文件,一般直接使用
android.R.layout.simple_list_item_1,这个布局中包含一个TextView
//textViewResourceId代表的是resourece布局中的TextView的Id号,使用系统布
局时传入android.R.id.text1
//其中T代表泛型,数组和集合中就是我们的数据
一个继承自AutoCompleteTextView的可编辑的文本视图,能够对用户键入的文本进行有效
地扩充提示,而不需要用户输入整个内容。它和AutoCompleteTextView不同就是能处理多
个输入的字段,如发送短信界面的联系人列表,同时能编辑多个联系人,并且能够提示。
<MultiAutoCompleteTextView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<MultiAutoCompleteTextView/>
用户必须提供一个MultiAutoCompleteTextView.Tokenizer用来区分不同的子串
multiAutoCompleteTextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
//CommaTokenzier使用‘,号’来区分
Spinner是一个下拉列表,通常用于选择一系列可选择的列表项,它可以用于适配器,也可以直接设置数组资源
"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(Context context, List extends Map<String, ?>> data, int
resource, String[] from, int[] to)
参数context:上下文,比如this。关联SimpleAdapter运行的视图上下文
参数data:Map列表,列表要显示的数据,这部分需要自己实现,类型要与上面的一致,每条项
目要与from中指定条目一致
参数resource:ListView单项布局文件的Id,这个布局就是你自定义的布局了,你想显示什
么样子的布局都在这个布局中。这个布局中必须包括了to中定义的控件id
参数 from:一个被添加到Map上关联每一个项目列名称的列表,数组里面是列名称
参数 to:是一个int数组,数组里面的id是自定义布局中各个控件的id,需要与上面的from
对应
ListView是android中最重要的一种视图,基本是个软件都会用到ListView 它以垂直列表的形式表现出来,只有通过Adapter才可以把列表中的数据映射到ListView中
<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的父类,我们通过它可以更加随心
的定制各种视图。
我要一步一步往上爬
在最高点乘着叶片往前飞
任风吹干流过的泪和汗
我要一步一步往上爬
等待阳光静静看着它的脸
小小的天有大大的梦想
我有属于我的天
任风吹干流过的泪和汗
总有一天我有属于我的天