1. 更改模拟器横竖屏切换
(1)启动AVD
(2)按Ctrl+F11键实现横竖屏切换
2. 自定义View中对外开放控件的监听事件
(1)自定义View中
public void OnBtnSetClickListener(OnClickListener listener)
{
btn.setOnClickListener(listener);
txt.setOnClickListener(listener);
}
(2)使用View的Activity中
view.OnBtnSetClickListener(new OnClickListener() {
public void onClick(View v) {}
});
3. 属性设置代码先后顺序对控件的影响
例:
btn.getBackground().setAlpha(127);
btn.setBackgroundResource(R.drawable.bj);
此时透明度无效果,必须先设置背景图,再设置背景图的透明度。
4. 延迟一段时间执行某个操作
(1)使用Timer
timer.schedule(timerTask, 5000);
private TimerTask timerTask = new TimerTask() {
@Override
public void run() {
//非UI线程,不能直接操作控件
handler.sendEmptyMessage(0);
}
};
(2)使用Handler
class myClass implements Runnable (
public void run() {
// handler.postDelayed(this, 5000); 添加这句话会重复执行下面的语句
//UI线程,可以直接操作控件
view.setVisibility(View.GONE);
}
public void oper() {
handler.postDelayed(this, 5000);
}
}
5. ScrollView和HorizonalScrollView的使用
(1)垂直、水平滚动条
(2)只能在其内部使用单一的布局文件,如LinearLayout
(3)二者可相互嵌套
(4)不能将二者嵌套在TableLayout中,否则滚动条不好使,可以放在其他Layout中
6 . padding和layout_margin区别
(1) padding属性用于设置组件内容距离组件边缘的距离。
(2) layout_margin属性用于设置组件间的间隔距离,或距离父组件边缘的距离。
7. gravity和layout_gravity区别
(1) gravity属性用于设置组件内容(包括容器组件的子组件)相对组件的位置。如设置TextView组件中的文本水平居中和垂直居中。
(2) layout_gravity属性用于设置当前组件相对于父组件的位置。
8. TextView或EditText显示图片
(1) 使用<img>标签,再使用Html.fromHtml方法将含<img>标签的文本转换成CharSequence对象。fromHtml方法的第二个参数,需要ImageGetter对象,通过ImageGetter.getDrawable方法可以返回一个封装要显示的图像的Drawable对象。
(2) 通过ImageSpan对象封装Bitmap对象,并使用SpannableString对象的setSpan方法将某一部分文本替换成ImageSpan对象,最后使用setText或append方法设置SpannableString对象。
TextView txt = (TextView) findViewById(R.id.imgTxt);
BackgroundColorSpan bgSpan = new BackgroundColorSpan(Color.YELLOW);//用来设置背景色
ImageSpan imgSpan = new ImageSpan(this, R.drawable.bottom_home);
SpannableString spannableStr = new SpannableString("homepng");
spannableStr.setSpan((Object)imgSpan, 4, spannableStr.length(), 0);
txt.setText(spannableStr);
9. TextView组件本身可以显示URL、Email等特殊信息,这些信息都会以链接形式显示,在单击链接时会执行相应的动作,如果想在单击链接后弹出自定义的Activity。
String str = "homepng";
SpannableString spannableStr = new SpannableString(str);
spannableStr.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
Intent intent = new Intent(AndroidTest.this, UrlActivity.class);
startActivity(intent);
}
}, 0, str.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
txt.setText(spannableStr);
// 单击链接时凡是有要执行的动作,都必须设置MovementMethod对象
txt.setMovementMethod(LinkMovementMethod.getInstance());
10. 在EditText中显示提示文本,在提示文本后面可以输入文本。
可以使用自定义EditText类,并覆盖onDraw方法,在该方法绘制提示文本。
然后使用paddingLeft属性根据提示文本的宽度设置开始输入文本的位置。
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
paint.setTextSize(18);
paint.setColor(Color.GRAY);
canvas.drawText("提示文本:", 2, getHeight() / 2 + 5, paint);
}
<com.tescomm.outman.MyEditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="100dp"
android:text="@string/hello"/>
11. onClick事件的实现方式
(1) 实现OnClickListener接口的onClick方法
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Toast.makeText(this, "btn click", Toast.LENGTH_LONG).show();
}
});
(2) 在布局文件中设置onClick属性
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="click"
android:onClick="btnClick"/>
// 注意方法参数必须是View对象
public void btnClick(View view) {
Toast.makeText(this, "btn click", Toast.LENGTH_LONG).show();
}
12 . 布局文件嵌套(使用include标签)
task_bottom_btn.xml
<?xml...>
<RelativeLayout>
</RelativeLayout>
task_call.xml
<RelativeLayout>
<TableLayout></TableLayout>
<include layout=""/>
</RelativeLayout>
13. Java中十六进制数问题
(1) 如果在类中定义成员变量、静态变量、常量,赋值成十六进制,则运算时仍是十六进制。如
private static int hexVal = 0x7000;
private int hexVal2 = 0x7000;
private final int hexVal3 = 0x7000;
(2)运算过程中,Java会将十六进制数转换成十进制,如方法中定义的局部变量。
int hexNum = 0x7000;
if (num == hexNum) // 此时会将hexNum十六进制转换成十进制数
14. 自定义View的onMeasure()方法
(1) View调用此方法来确定本身和包含内容的大小。此方法被measure(int, int)唤起,而且必须被子类重写以得到包含内容确切大小。
(2) 注意,当重写此方法时,必须调用setMeasureDimension(int, int)来保存View的大小,否则发生IllegalStateException。
(3) 例,在为自定义View添加ScrollView时必须重写此方法
onMeasure(int width, int height) {
super.onMeasure(width, height);
int sizeH = (taskList.size() + 1) * 32;
setMeasuredDimension(width, sizeH);
}
15 . Layout中添加控件的方法
(1) 使用addView(View)方法
此方法对Layout对象只能使用一次,第二次调用前,要先使用remove方法,移除Layout中的控件。
(2) 使用addView(View, LayoutParams)方法
如果控件的布局不同,则要为每个控件单独创建LayoutParams对象。例
RelativeLayout.LayoutParams param = new RelativeLayout.LayoutParams(...);
param.addRule(...);
relativeLayout.addView(btn1, param);
param = new RelativeLayout.LayoutParams(...);
param.addRule(...);
relativeLayout.addView(btn2, param);
16. 获取文本宽度 例如:paint.measureText("Android");
17. 画图时去掉锯齿的方法
(1) paint.setAntiAlias(true);
(2) canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG));
18. 加载图片,图片变形的问题
(1) 使用自定义View或xml加载图片时,没有设置图片的缩放比例,但显示的图片有缩放。
(2) 检查图片是按哪种格式制作的,是hdpi,ldpi,mdpi,再看图片是否正确的放在drawable的文件夹下。
19. 关于HTC手机有快速启动功能,监听关机广播的问题。
快速启动功能,关机时只是待机,并没有完全关闭手机,所以和待机(按下power键)触发的广播一致。
<receiver android:name=".ScreenUnlockReceiver">
<intent_filter>
<action android:name="android.intent.action.USER_PRESENT"/>
</intent_filter>
</receiver>