一. 继承图

二. Xml方式

继承自 TextView 的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
android:text            //设置文本内容
android:textColor //设置字体颜色
android:textSize //设置字体大小
android:textStyle //设置字形,可以设置一个或多个,用"|"隔开,bold:粗体,italic:斜体,bold | italic:又粗又斜
android:textAllCape //true:全部大写 flase:遵循输入的大小写

android:background //设置输入框背景,@null是去掉原生的背景

android:drawableLeft //在text的左边输出一个drawable,如图片
android:drawablePadding //设置text与drawable(图片)的间隔

android:hint //设置提示的文本内容
android:textColorHint //设置提示文本的颜色

android:inputType //限制输入类型
//number:整数类型
//numberDecimal:小数点类型
//date:日期类型
//text:文本类型(默认值)
//phone:拨号键盘
//textPassword:密码
//textVisiblePassword:可见密码
//textUri:网址

android:ellipsize //设置当文字过长时,该控件该如何显示。
//start:省略号显示在开头
//end:省略号显示在结尾
//middle:省略号显示在中间
//marquee:以跑马灯的方式显示(动画横向移动)

android:maxLength //限制显示的文本长度,超出部分不显示

android:minLines //设置文本的最小行数
android:maxLines //设置文本的最大行数

android:lines //设置文本的行数,设置两行就显示两行,即使第二行没有数据。
//singleLine设置单行的方式废弃了
//单独设置android:lines="1",无效
//由于android:inputType属性默认值为none的缘故
//只要将android:inputType属性设置为其他就可以了

android:lineSpacingExtra//设置行间距

android:autoLink //为文本设置链接

android:textIsSelectable//文本是否可以复制

android:shadowRadius //设置阴影的半径
android:shadowColor //指定文本阴影的颜色
android:shadowDx //设置阴影横向坐标开始位置
android:shadowDy //设置阴影纵向坐标开始位置

android:clickable //视图是否可以点击
android:focusable //视图是否获得焦点
android:enabled //视图是否可编辑

android:cursorVisible //设定光标为显示/隐藏,默认显示
android:textCursorDrawable//设置光标的样式 "@null"作用是让光标颜色和text color一样


android:onClick //设置点击事件

三. Onclick 的使用方法

1. xml中的onClick

1
2
3
4
5
android:onClick="show"

public void show(View view){
//处理点击事件
}

2. 匿名类的方式

单个类需要监听者

1
2
3
4
5
6
7
8
Button btn = findViewById(R.id.btn);

btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//处理点击事件
}
});

3. 实现OnClickListener接口中的onClick方法

多个类需要监听者

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//当前类实现 View.OnClickListener 接口
public class SecondActivity extends AppCompatActivity implements View.OnClickListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);

Button btn1 = findViewById(R.id.btn1);
btn1.setOnClickListener(this);

Button btn2 = findViewById(R.id.btn2);
btn2.setOnClickListener(this);
}

@Override
public void onClick(View v) {
if(v.getId() == R.id.btn1){

//处理 btn1 的点击事件
}else if(v.getId() == R.id.btn2){

//处理 btn2 的点击事件
}
}
}

4. 创建内部类的方式

不常用,麻烦

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//当前类实现 View.OnClickListener 接口
public class SecondActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);

Button btn = findViewById(R.id.btn);
btn.setOnClickListener(new MyButton);
}

}

private class MyButton implements View.OnClickListener {
@Override
public void onClick(View v) {
//处理 btn 的点击事件
}
}

5. Lambda表达式

难理解

1
2
3
4
5
6
7
8
9
10
11
Button btn = findViewById(R.id.btn);

//使用Lambda表达式后:
button.setOnClickListener((v) -> {
// 处理点击事件
});

//另外,当接口只有一个参数时,我们还可以进一步简化,将参数外面的括号去掉:
button.setOnClickListener(v -> {
// 处理点击事件
});

四. 常见的问题

1. Button 设置 background 之后点击动画效果消失的问题

在 Android 5.0 推出之后,点击 Button 默认增加了水波纹的动画效果。但是按照往常的方式给 Button 设置了 background 之后,发现水波纹效果没有了。

正确的改变 Button 颜色的姿势如下:

首先在 values/styles.xml 文件中添加如下风格:

1
2
3
<style name="BlueButtonStyle" parent="ThemeOverlay.AppCompat">
<item name="colorButtonNormal">@android:color/holo_blue_light</item>
</style>

或者是:

1
2
3
<style name="RedButtonStyle" parent="Widget.AppCompat.Button.Borderless">
<item name="colorButtonNormal">@android:color/holo_red_light</item>
</style>

这两种主题都可以,尝试之后,发现效果一致。

在 xml 文件中使用:

1
2
3
4
5
6
7
8
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:text="Button"
android:textAllCaps="false"
android:textColor="@android:color/white"
android:theme="@style/RedButtonStyle"/>

参考文章

解决 Button 设置 background 之后点击动画效果消失的问题

Lambda表达式的使用实例(转载)

安卓按钮4种点击事件

Android控件之Button介绍