0%

Android Button事件

按钮常用事件枚举

其实这些都是比较基本的,和点击事件之类的很像,学会一个其实就可以举一反三了,而且按钮是继承于TextView的。

布局的一些操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<Button
android:id="@+id/Button02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/button1"
android:layout_marginLeft="24dp"
android:layout_marginTop="42dp"
android:layout_toRightOf="@+id/Button01"


android:drawableLeft="@drawable/ic_launcher"
android:drawablePadding="30dip"
android:drawableTop="@drawable/ic_launcher"

android:text="Button" />

这个drawableLeft就是左边图片的资源,drawablePadding这个是图片和文字的距离。


下面java代码用到的布局:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<Button
android:id="@+id/Button01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/AtEdit1"
android:layout_alignParentBottom="true"
android:layout_marginBottom="168dp"
android:text="Button" />

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/Button01"
android:layout_alignRight="@+id/Button01"
android:layout_marginBottom="37dp"
android:background="@drawable/ic_launcher"
android:text="Button" />

点击事件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Tv_01 = (TextView) findViewById(R.id.Button01);
Tv_01.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
Button btn = (Button) v;
//int WindowsWidth = getWindow().getWindowManager().getDefaultDisplay().getWidth();
//Log.d("aaa", WindowsWidth+"");
if(value == 1 && btn.getWidth() >= 300)
value = -1;
else if(value == -1 && btn.getWidth() < 100)
value = 1;

btn.setWidth(btn.getWidth() + value*(int)(btn.getWidth()*0.1));
btn.setHeight(btn.getHeight() + value*(int)(btn.getHeight()*0.1));

}
});

这个就是一个比较典型的点击事件,就是通过放大缩小来展示的,传进来的View就是事件源。

触摸事件

就是当你触摸到了就响应的一个事件,具体编写:
先要接口implements OnTouchListener

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Tv_1.setOnTouchListener(this);
/*...*/
@Override
public boolean onTouch(View v, MotionEvent event) {
//触摸的时候触发
int action = event.getAction();//事件类型
switch (action) {
case MotionEvent.ACTION_DOWN://是按下
Tv_1.setBackgroundResource(R.drawable.ic_l1);
break;
case MotionEvent.ACTION_UP://是抬起
Tv_1.setBackgroundResource(R.drawable.ic_launcher);
break;
default:
break;
}
return false;//事件是否继续传递下去,点击之类的
}

这就是触摸换图
这里就是说通过event进行判断,是哪种动作,返回值的话呢就是是否继续传递下去,就和那个钩子链差不多。

焦点事件

OnFocusChangeListener
Tv_01.setOnFocusChangeListener(this);

1
2
3
4
5
6
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus)
Toast.makeText(this, "哟焦点了",Toast.LENGTH_SHORT);

}

代码实现图文混排

既然Button是继承于TextView的,那么我们一样可以使用span。

1
2
3
4
5
6
7
8
9
10
SpannableString span = new SpannableString("代码实现");
ImageSpan imageSpan = new ImageSpan(BitmapFactory.decodeResource(getResources(), R.drawable.ic_l1));
span.setSpan(imageSpan, 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Tv_2.setText(span);
Tv_2.append("我的按钮");
SpannableString span2 = new SpannableString("代码实现2");
ImageSpan imageSpan2 = new ImageSpan(BitmapFactory.decodeResource(getResources(), R.drawable.ic_l2));
span2.setSpan(imageSpan2, 0,4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Tv_2.append(span2);
//这个是在点击事件里面的

首先我们先new一个SpannableString的对象,然后new一个图片的span对象,资源使我们的图片,然后将其放入SpannableString中,然后最终实现其效果,这里需要注意的是:字符长度是Unicode编码,所以中文也是占一个字符的。

实现效果