1 基本UI(二)
【
常用属性:
style进度条样式
Android:max进度最大值
android:progress进度值
setMax(intmax)设置进度最大值
常用方法:
setMax(intmax)设置进度最大值
getMax()获取进度最大值
setProgress(intprogrss)设置进度值
getProgress()获取进度值
==练习
android:id="@+id/pdar1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleHorizontal"
android:max="100"
android:progress="30"/>
@Override
publicvoid onClick(View v) {
//TODO Auto-generated method stub
switch(v.getId()) {
caseR.id.btn_add:
pdar1.setProgress(pdar1.getProgress()+ 10);
break;
caseR.id.btn_minus:
pdar1.setProgress(pdar1.getProgress()- 10);
break;
default:
break;
}
tv_progress.setText(pdar1.getProgress()+"%");
}
}
//如果需要执行耗时操作,那么耗时操作就应该放在子线程中执行
newThread(){
booleanisRight = true; //记录滚动条的滚动方向
publicvoid run() {
//自动来回滚动
while(true){
try{
Thread.sleep(50);
//获取当前进度
int progress = pbar.getProgress();
//判断当前的进度的位置,如果是0或最大值,就需要改变方向
if(progress<=0){
isRight= true; //代表方向往右
}elseif(progress >= pbar.getMax()){
isRight = false; //代表方向往左
}
//根据滚动的方向修改滚动条的值
if(isRight){
pbar.setProgress(pbar.getProgress()+1);
}else{
pbar.setProgress(pbar.getProgress()-1);
}
}catch (InterruptedException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}.start();
】
【
publicclass MainActivity extends Activity {
privateButton button1;
privateSeekBar seekBar1;
privateSeekBarAutoRun seekBarAutoRun;
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViews();
bindListener();
}
privatevoid bindListener() {
//设置View的触摸事件
button1.setOnTouchListener(newOnTouchListener() {
@Override
publicboolean onTouch(View v, MotionEvent event) {
//TODO Auto-generated method stub
switch(event.getAction()) {
caseMotionEvent.ACTION_DOWN://手指按下
Log.i("msg","手指按下");
//进度条自动开始滚动
if(seekBarAutoRun==null){
seekBarAutoRun= new SeekBarAutoRun();
seekBarAutoRun.start();
}
break;
caseMotionEvent.ACTION_MOVE://手指移动
Log.i("msg","手指移动");
break;
caseMotionEvent.ACTION_UP://手指离开
Log.i("msg","手指离开");
//进度条自动停止滚动
if(seekBarAutoRun!= null){
seekBarAutoRun.autoStopRunTask();
seekBarAutoRun= null;
}
break;
default:
break;
}
returntrue; //事件消费的问题
}
});
}
privatevoid findViews() {
button1= (Button) this.findViewById(R.id.button1);
seekBar1= (SeekBar) this.findViewById(R.id.seekBar1);
}
classSeekBarAutoRun extends Thread{
@Override
publicvoid run() {
while(!isInterrupted()){
try{
Thread.sleep(50);
seekBar1.setProgress(seekBar1.getProgress()+ 1);
}catch (InterruptedException e) {
e.printStackTrace();
break;
}
}
}
/**
* 停止自动滚动
*/
publicvoid autoStopRunTask(){
interrupt();
}
}
}
】
【
SeekBar是ProgressBar的子类,功能很相似
SeekBar可以与用户进行交互,在展示进度的同时允许用户手动改变进度
特有属性和方法:
android:thumb设置滑块所使用的图片
setOnSeekBarChangeListener(listener) 设置滑动监听器
】
【特有属性和方法
android:numberStars设置星星的数量(默认5颗星)
android:rating设置被点亮的星星的个数
android:stepSize设置最小评分的颗粒度
setOnRatingBarChangeListener(listener)设置监听器
】
【
private void bindListener() {
seekbar.setOnSeekBarChangeListener(newOnSeekBarChangeListener() {
@Override
public voidonStopTrackingTouch(SeekBar seekBar) {
// TODOAuto-generated method stub
}
@Override
public voidonStartTrackingTouch(SeekBar seekBar) {
// TODOAuto-generated method stub
}
@Override
public voidonProgressChanged(SeekBar seekBar, int progress,
booleanfromUser) {
if(progress<=30){
//imageview.setImageResource(R.drawable.img1);
imageview.setImageResource(imges[0]);
}elseif(progress<=60){
//imageview.setImageResource(R.drawable.img2);
imageview.setImageResource(imges[1]);
}else if(progress<=90){
//imageview.setImageResource(R.drawable.img3);
imageview.setImageResource(imges[2]);
}
}
});
}
】
【
1、id
2、布局
3、字符串
4、数组
5、样式和主题
6、菜单
7、已编译的任意XML资源文件:res/xml
8、未编译的原始资源文件:res/raw
9、图像
普通图像资源:drawable
xml图像资源:bitmap
图层(Layer)资源:layer-list
图像状态(State)资源:selector
图像级别(Level)资源:level-list
淡入淡出(CrossFade)资源:transition
外形(Shape)资源:shape(shape、gradient、padding、corners、stroke)
10、动画资源
逐帧动画:res/drawable
补间动画:res/anim
透明度补间动画 alpha
缩放补间动画 scale
旋转动画 rotate
移动补间动画translate
属性动画:res/animator(api11出现)
逐帧动画:res/drawable
属性动画:res/animator(api11出现)
】
【
Android的国际化和本地化
internationalization(国际化)简称 i18n,因为在i和n之间还有18个字符
localization(本地化),简称L10n
一般说明一个地区的语言时,用语言-地区的形式,如 zh-CN, zh-TW
//获取字符串资源
StringssString = getResources().getString(R.string.app_name);
getString(R.string.app_name); //等价
】
【
在Android中,推荐使用数组资源文件来定义数组
位置:res/values/arrays.xml
小明
小亮
1
2
//字符串数组
String[]names=getResources().getStringArray(R.array.nameaa);
Log.i("MainActivity",names.toString());
//获取整型数组资源
int[] intArray=getResources().getIntArray(R.array.interarray);
Log.i("MainActivity",intArray.toString());
】
【
位置:res/xml目录下
Java代码中的获取方式:getResources().getXml(R.xml.文件名称)
哈利波特
99.9
Thinking In Java
120
小李飞刀
50
//原始xml资源
XmlResourceParserparser =getResources().getXml(R.xml.books);
//解析省略
//这里注意的是,XmlResourceParser是一个pull解析器,不过多了一个方法,就是close方法
//在解析完xml文件后,记得一定要调用close()方法释放资源
】
【可以新建一个与分辨率无关适配的图形资源文件夹:drawble
1、普通图像资源
2、 图像状态(selector)资源
slt_play.xml
引用:
android:background="@drawable/slt_play"
3、 外形(shape)资源
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape=["rectangle" | "oval" |"line" | "ring"] >
android:radius="integer"
android:topLeftRadius="integer"
android:topRightRadius="integer"
android:bottomLeftRadius="integer"
android:bottomRightRadius="integer" />
android:angle="integer"
android:centerX="integer"
android:centerY="integer"
android:centerColor="integer"
android:endColor="color"
android:gradientRadius="integer"
android:startColor="color"
android:type=["linear" | "radial" |"sweep"]
android:useLevel=["true" | "false"] />
android:left="integer"
android:top="integer"
android:right="integer"
android:bottom="integer" />
<size
android:width="integer"
android:height="integer" />
android:color="color" />
android:width="integer"
android:color="color"
android:dashWidth="integer"
android:dashGap="integer" />
引用:
android:background="@drawable/shape_demo"
】
【
在代码中可以通过style和theme来提高代码的复用性和可维护性。
作用范围不同,样式作用于单个小控件,而主题作用于Activity或整个APP
引用位置不同,样式都是在布局文件中被引用,而主题是在清单文件中被引用
Values\ styles.xml
#F00
italic
//注意:样式可以实现继承
引用:
style="@style/text_style2"
主题:定义同样式,在Style.xml中,引用的形式不同:是在清单文件中引用。
background">#D2E6D7
parent="@android:style/Theme.DeviceDefault.Dialog.NoActionBar">
#32FE32
windowTitleSize">40dip
windowBackground">@drawable/abc
windowNoTitle">true
windowFullscreen">true
在清单文件中引用:
android:name="com.example.day05theme.Activity2"
android:theme="@style/blue_XYSTheme"/>
android:theme="@style/girl_XYSTheme"/>
】
Values下的
color:颜色资源
位置:res/values/colors.xml
dimen:尺寸资源
位置:res/values/dimens.xml
id:id资源
【常见使用形式:values
"1.0"encoding="utf-8"?>
"id"name="tv1"/>
引用:
android:id="@id/tv2"
】
使用的注意事项:
1)在布局中引用id资源的话,必须要保证在引用之前先创建过这个id
也可以在引用时候使用@+id,保证id肯定存在,
PS:@+id的意思就是在使用这个id之前先会判断id是否存在,如果不存在就创建,如果存在就直接引用
2)在同一个布局文件中不能出现同名的id,但是在不同的布局文件中可以出现相同的id
3)我们可以预先将需要使用的id全部抽取出来作为资源定义在资源文件中
提示:在Android支持资源类型有很多,如果要学习其他资源的使用,那么建议查看官方文档进行学习,如果要看资源使用的格式,可以查看SDK自带的资源文件,SDK自带的资源文件位置:SDK根目录\platforms\android-XX\data\res