a) 线性布局
i. 有点像AWT编程中的FlowLayout,不同的是,Android的线性布局不会换行,当组件一个挨着一个的排列到头之后,剩下的组件将不会被显示出来;而FlowLayout中的组件会换行;
ii. 线性布局没有layout_gravity属性,设置无效。
b) 表格布局
i. 设置某列被设为Shrinkable,那么该列的所有单元格的宽度可以被收缩。
ii. 设置某列被设为Stretchable,那么该列的所有单元格的宽度可以被拉伸。
iii. 设置某列被设为Collapsed,那么该列的所有单元格会被隐藏。
c) 帧布局
i. 帧布局最有代表性的霓虹灯效果的原理:
For(int i=0;i<7-currentColor;i++){
Views[i].setBackgroundResource(colors[i+currentColor]);
}
For(int i=7-currentColor,j=0; i<7; i++,j++){
Views[i].setBackgroundResource(colors[j]);
}
ii.
Px(像素):每个px对应屏幕上的一个点。
Dip或dp:一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dip=1px。但随着屏幕密度的改变,dip与px的换算会发生改变。
Sp:主要处理字体的大小,可以根据用户的字体大小首选项进行缩放。
In:标准长度单位。
Mm:标准长度单位。
Pt:标准长度单位,1/72in
二、View子类
a) 时钟(AnalogClock、DigitalClock、Chronometer)
i. 第一第二个为模拟时钟和数字时钟,第三个为计时器。
ii. Chronometer的用法:
1. setBase(long base):设置计时器的起始时间
2. setFormat(String format):设置显示时间的格式
3. start():开始计时
4. stop():停止计时
5. setOnChronometerTickListener(Chronometer.OnChronometerTickListener):为计时器绑定时间监听,当计时器改变时触发该监听器。
iii. 获取系统时间的种类和区别(SystemClock):
1. System.currentTimeMillis(): 该时间是基于世界时间的,它返回的是从January 1, 1970 00:00:00 UTC到现在时间已经逝去了多多少millisecond,当我设置Android手机的系统时间时,会应该影响该值.
2. uptimeMillis(): 它表示的是手机从启动到现在的运行时间,且不包括系统sleep(CPU关闭)的时间,很多系统的内部时间都是基于此,比如Thread.sleep(millls), Object.wait(millis), and System.nanoTime()
3. elapsedRealtime(): 它表示的是手机从启动到现在的运行时间,且包括系统sleep(CPU关闭)的时间。
b) 图像视图(ImageView)
i. 使用之前最好先如下操作:
BitmapDrawable bitmapDrawable = (BitmapDrawable)image.getDrawable();
If(!bitmapDrawable.getBitmap().isRecycled())
{
bitmapDrawable.getBitmap().recycle();
}
然后再设置image的值。
ii. 通过image可以得到Drawable对象,然后可以得到Bitmap对象,我们的主要操作都是针对Bitmap进行的,image只是在手机上显示的区域,而Bitmap则是你真实的图片,大小与显示的区域有不同。比如我们点击图片上某一个点,这个点的坐标是相对于image的坐标,但是如果我们需要对真实的图片进行操作的话,则需要将这个点的坐标进行相应的缩放倍数的增减。
c) 日期、时间选择器(DataPicker和TimerPicker)
i. 两个组件通过OnDataChangedListener、OnTimerChangedListener进行监听。
ii. 两个组件绑定鉴定的方式略有不同:
1. dataPicker.init(year,month,day,new OnDataChangeListener(){
public void onDataChange(Datapicker arg0,int year,int month,int day){
ChooseData.this.year = year;
….
….
}
}
2. timerPicker.setOnTimerChangedListener(new OnTimerChangedListener(){
public void onTimerChanged(TimerPicker arg0,int hour,int minute){
ChooseData.this.hour = hour;
….
}
}
d) 进度条——显示在标题上的进度条
i. 启用显示进度的进度条:
requestWindowFeature(Window.FEATURE_PROGRESS);
显示:
setProgressBarVisibility(true);
ii. 启用不显示进度的进度条:
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
显示:
setProgressBarIndeterminateVisibility(true);
e) 拖动条(SeekBar)
i. 通过改变android:thumb属性来改变拖动条中滑块的样式,指定一个Drawable对象。
ii. 绑定一个OnSeekBarChangeListener监听器,实现onProgressChanged方法。
f) 选项卡(Ta