Button控件的基本用法和TextView、EditText相似,最常用的是按钮单击事件。
案例一:按钮的焦点变化
1. 主要代码
......
private int value = 1; // 用于改变按钮的大小
......
commonButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Button button = (Button) v;
if (value == 1
&& button.getWidth() == getWindowManager().getDefaultDisplay().getWidth()) {
value = -1;
} else if (value == -1 && button.getWidth() < 100) {
value = 1;
}
button.setWidth(button.getWidth() + (int) (button.getWidth() * 0.1) * value);
button.setHeight(button.getHeight() + (int) (button.getWidth() * 0.1) * value);
}
});
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
/*
* 表示当前触摸屏触摸的时候会回调该方法 MotionEvent表示移动的动作,有触摸笔,手势,滚动球等
* getAction():表示计算按下点与滑动后的点的之间的距离
*/
imageButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
v.setBackgroundResource(R.drawable.button1);
} else if (event.getAction() == MotionEvent.ACTION_DOWN) {
v.setBackgroundResource(R.drawable.button2);
}
return false;
}
});
// 表示当前这个控件的焦点发生变化的时候就触发它。
imageButton.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
imageButton.setBackgroundResource(R.drawable.button2);
} else {
imageButton.setBackgroundResource(R.drawable.button1);
}
// TODO Auto-generated method stub
}
});
imageButton.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
/*
* KeyEvent表示按下的动作,getAction()表示获取用户的动作方法 查看android api 文档
* ACTION_UP 于 ACTION_DOWN 表示上下键
*/
// TODO Auto-generated method stub
if (KeyEvent.ACTION_DOWN == event.getAction()) {
v.setBackgroundResource(R.drawable.button3);
} else if (KeyEvent.ACTION_UP == event.getAction()) {
v.setBackgroundResource(R.drawable.button2);
}
return false;
}
});
2. Demo执行结果
案例二:图文混排的按钮
1. 主要代码
SpannableString spannableStringLeft = new SpannableString("Left");
Bitmap bitmapLeft = BitmapFactory.decodeResource(getResources(), R.drawable.image_left);
ImageSpan imageSpanLeft = new ImageSpan(bitmapLeft, DynamicDrawableSpan.ALIGN_BOTTOM);
//指定当前这个位图位于按钮的低端
//0-4 表示把图片放在从0到4这些字符上面。
spannableStringLeft.setSpan(imageSpanLeft, 0, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
SpannableString spannableStringRight = new SpannableString("Right");
Bitmap bitmapRight = BitmapFactory.decodeResource(getResources(), R.drawable.image_right);
ImageSpan imageSpanRight = new ImageSpan(bitmapRight);
spannableStringRight.setSpan(imageSpanRight, 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
button.append(spannableStringLeft);
button.append("我的按钮");
button.append(spannableStringRight);
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="120dp"
android:orientation="horizontal" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableTop="@drawable/star"
android:text="按钮一" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawablePadding="30dp"
android:drawableTop="@drawable/star"
android:text="按钮二" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/star"
android:text="按钮三" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawablePadding="30dp"
android:drawableRight="@drawable/star"
android:text="按钮四" />
</LinearLayout>
<Button
android:id="@+id/button"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_marginTop="10dp"/>
2. Demo效果
|