前言

  • 本文是根据上海应用技术大学余艳芳老师的移动应用课程写的上课笔记。

  • 本章内容为:widget组件的介绍,使用方法和相关样例代码。

  • 部分素材以及drawable中的文件代码没有给出,请读者自己补全或者删除。(可以将有关@drawable的有关代码删除)

  • 完整的项目在本人的GitHub仓库中,以下是相关链接:https://github.com/ufovsmba/TodayApplication

widget组件通用属性

属性名称 功能描述
android:id 设置控件的索引
android:layout_height 设置布局的高度
android:layout_width 设置布局的宽度
android:autoLink 设置是否当文本为URL链接时,文本显示为可点击的链接
android:autoText 设置是否自动执行输入值的拼写纠正
android:bufferType 指定getText()方式取得的文本类型
android:capitalize 设置英文字母大写类型。需要弹出输入法才能看到
android:cursorVisible 设定光标为显示/隐藏,默认显示

TextView

TextView用于在屏幕中显示静态字符串

image-20220401111228667

TextView类的XML属性及描述

XML属性 功能描述
android:layout_alignParentLeft 指定该组件是否与布局容器左对齐
android:digits 设置允许输入哪些字符
android:drawbaleLeft 在text的左边输出一个drawable
android:drawbalePadding 设置text与drawable的间隔
android:drawbleRight 在text的右边输出一个drawable
android:drawbleTop 在text的正上方输出一个drawable
android:ellipsize 设置当文字过长时如何显示该控件
android:gravity 设置文本位置,例如center表示文本将居中表示
android:hint 设置文本为空时显示的提示信息
android:ems 设置TextView的宽度为N个字符的宽度
android:maxEms 设置TextView的宽度为最长为N个字符的宽度
android:minEms 设置TextView的宽度为最短为N个字符的宽度
android:maxLength 限制显示的最大文本长度,超出部分不显示
android:lines 设置文本的行数
androidmaxLines 设置文本的最大显示行数
android:minLines 设置文本的最小行数
android:linksClickable 设置链接是否可以点击
android:lineSpacingExtra 设置行间距
android:singleLine 设置单行显示
android:text 设置显示文本
android:textAppearance 设置文本外观
android:textColor 设置文本颜色
android:textColorHighlight 设置被选中文字的底色,默认是蓝色
android:textColorHint 设置提示信息文字的颜色,默认是灰色
android:textColorLink 文件链接的颜色
android:textScaleX 设置文字的缩放,默认为1.0f
android:textSize 设置文字大小
android:textStyle 设置字形(粗体,斜体等)

测试样例代码

image-20220401143925701

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.gallifrey.todayapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.text.Html;
import android.widget.TextView;

public class TextViewActivity extends AppCompatActivity {
private TextView mTv;

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

mTv=findViewById(R.id.tv7);
// mTv.getPaint().setFakeBoldText(true);
// mTv.getPaint().setStrikeThruText(true);
// mTv.getPaint().setUnderlineText(true);
// mTv.getPaint().setAntiAlias(true);
mTv.setText(Html.fromHtml("<u><b><s>www.baidu.com</s>"));
}
}
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
62
63
64
65
66
67
68
69
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".TextViewActivity"
android:orientation="vertical"
>
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="北京冬奥会,舞动青春"
android:textSize="30sp"
android:textColor="#970C0C"
android:textStyle="italic|bold"
></TextView>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="http://www.baidu.com"
android:textSize="30sp"
android:autoLink="web"
android:layout_marginTop="20dp"
/>
<TextView
android:layout_width="200dp"
android:layout_height="wrap_content"
android:ellipsize="middle"
android:text="北京东奥会,舞动青春"
android:textSize="30sp"
android:layout_marginTop="20dp"
android:lines="1"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:textSize="30sp"
android:drawableLeft="@mipmap/edit"
android:drawablePadding="10dp"
android:text="有图片的文字"
/>
<TextView
android:id="@+id/tv7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="北京冬奥会"
android:textSize="30sp"
android:layout_marginTop="20dp"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:text="北京冬奥会,舞动青春,绽放热情"
android:singleLine="true"
android:layout_marginTop="20dp"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:focusableInTouchMode="true"
android:focusable="true"
android:clickable="true"
></TextView>>




</LinearLayout>

Button

button类常用方法

方法 功能描述
onkeyDown() 当用户按键时,该方法被调用
onkeyUp() 当用户按键弹起后,该方法被调用
onKeyLongPress() 当用户长按键时,该方法被调用
onKeyMultiple() 当用户多次按键时时,该方法被调用
invalidateDrawable() 用于刷新Drawable对象
onPreDraw() 用于设置视图显示
setOnClickListener() 用于设置点击监听器

测试样例代码

image-20220401143713245

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
package com.gallifrey.todayapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class ButtonActivity extends AppCompatActivity {
private Button mBtnClick;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_button);


mBtnClick=findViewById(R.id.btn_click);
mBtnClick.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(ButtonActivity.this,"ButtonActivity",Toast.LENGTH_LONG).show();
}
});
}
}
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
62
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="20dp"

tools:context=".ButtonActivity">
<Button
android:id="@+id/btn_normal"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="普通按钮"
android:textSize="30sp"
android:background="#f00"
android:textColor="#fff"
/>
<Button
android:layout_marginTop="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="实心圆角"
android:textSize="30sp"
android:background="@drawable/circleradius"
app:layout_constraintTop_toBottomOf="@id/btn_normal"
android:id="@+id/btn_solid"
/>
<Button
android:id="@+id/btn_hollow"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="30sp"
android:text="空心圆角"
android:background="@drawable/hollow"
android:layout_marginTop="20dp"
app:layout_constraintTop_toBottomOf="@id/btn_solid"/>

<Button
android:id="@+id/btn_press"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按压效果"
android:textSize="30sp"
android:layout_marginTop="20dp"
android:background="@drawable/pressresult"
app:layout_constraintTop_toBottomOf="@id/btn_hollow"
android:textColor="@drawable/textcolor"
></Button>
<Button
android:id="@+id/btn_click"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="点击效果"
android:textSize="30sp"
android:layout_marginTop="20dp"
app:layout_constraintTop_toBottomOf="@id/btn_press"
/>

</androidx.constraintlayout.widget.ConstraintLayout>

EditText

EditText编辑框,常用属性

  • android:hint 提示信息
  • android:inputType 输入类型

在EditText中,常用的inputType属性值

属性值 功能描述
text 普通文本,默认
textCapCharacters 字母大写
textCapWords 每个单词的首字母大写
textAutoCorrect 自动完成
textMultiLine 多行输入
textNoSuggestions 不提示
textUri 网址
textEmailAddress 电子邮件地址
textEmailSubject 邮件主题
textShortMessage 短讯
textLongMessage 长信息
textPassword 密码
number 数字
numberSigned 带符号数字格式
numberDecimal 带小数点的浮点格式
phone 拨号键盘
datetime 时间日期
date 日期键盘
time 时间键盘

测试样例代码

image-20220401143851911

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
package com.gallifrey.todayapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.widget.EditText;

public class EditTextActivity extends AppCompatActivity {
private EditText mEtUser;
private EditText mEtPwd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_text);

mEtUser=findViewById(R.id.et_user);
mEtUser.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

}

@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
Log.i("EditTextActivity", "onTextChanged: "+charSequence);
}

@Override
public void afterTextChanged(Editable editable) {

}
});
}
}
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
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="100dp"
android:paddingStart="10dp"
android:paddingEnd="10dp"
tools:context=".EditTextActivity">

<TextView
android:id="@+id/tv_user"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="用户名: "

android:textSize="30sp" />

<EditText
android:paddingStart="10dp"
android:id="@+id/et_user"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBaseline="@id/tv_user"
android:layout_toEndOf="@id/tv_user"
android:hint="请输入号码"
android:inputType="phone"
android:textSize="30sp"
android:background="@drawable/bgeditext"

/>
<TextView
android:id="@+id/tv_pwd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tv_user"
android:layout_alignStart="@id/tv_user"
android:layout_marginTop="40dp"
android:text="密 码: "
android:textSize="30sp" />

<EditText
android:id="@+id/et_pwd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/et_user"
android:layout_alignBaseline="@id/tv_pwd"
android:layout_toEndOf="@id/tv_pwd"
android:background="@drawable/bgeditext"
android:paddingStart="10dp"
android:drawablePadding="5dp"
android:hint="请输入密码"
android:inputType="textPassword"
android:textSize="30sp" />

</RelativeLayout>

RadioButton

单选按钮和单选按钮组

  • RadioButton:单个单选框
  • RadioGroup:容纳多个RadioButton的容器

  • 一个RadioGroup中至少有2个RadioButton

  • 同一个RadioGroup中,只能有一个RadioButton被选中
  • 不同的RadioGroup,相互的RadioButton不影响
方法 功能描述
getCheckedRadioButtonId() 获取被选中的按钮id
clearCheck() 清除选中状态
check(int id) 通过参数id来设置该选项为选中状态
setOnCheckedChangeListener(…) 在一个单选按钮组中,当该单选按钮勾选状态发生改变时所要调用的回调函数
getText() 用于获取单选按钮

测试样例代码

image-20220401143758949

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
package com.gallifrey.todayapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;

public class RadioButtonActivity extends AppCompatActivity {
private RadioGroup mRgSex,mRgAge;
private Button mBtnRbOk;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_radio_button);
mRgAge=findViewById(R.id.rg_age);
mRgSex=findViewById(R.id.rg_sex);
mBtnRbOk=findViewById(R.id.btn_rb_ok);
mRgSex.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int id) {
RadioButton rb=findViewById(id);
Toast.makeText(RadioButtonActivity.this,rb.getText(),Toast.LENGTH_LONG).show();
}
});

mBtnRbOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String choose="";
RadioButton rb;
rb=findViewById(mRgSex.getCheckedRadioButtonId());
choose+=rb.getText();
rb=findViewById(mRgAge.getCheckedRadioButtonId());
choose+="\n"+rb.getText();
Toast.makeText(RadioButtonActivity.this,choose,Toast.LENGTH_LONG).show();
}
});
}
}
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".RadioButtonActivity">
<TextView
android:id="@+id/tv_invest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="问卷调查"
android:textSize="40sp"
android:textColor="#00f"
android:textStyle="italic|bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:paddingTop="20dp"
/>
<TextView
android:id="@+id/tv_sex"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="性别: "
android:textSize="30sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_invest"
app:layout_constraintEnd_toStartOf="@id/rg_sex"
android:layout_marginTop="40dp"/>
<RadioGroup
android:id="@+id/rg_sex"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/tv_sex"
app:layout_constraintTop_toTopOf="@id/tv_sex">
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="男"
android:textSize="30sp"
android:paddingStart="20dp"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:text="女"
android:paddingStart="20dp"
android:layout_marginStart="20dp"/>
</RadioGroup>

<TextView
android:id="@+id/tv_age"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="年龄: "
android:textSize="30sp"
android:textStyle="bold"
android:layout_marginTop="40dp"
app:layout_constraintStart_toStartOf="@id/tv_sex"
app:layout_constraintTop_toBottomOf="@id/tv_sex"/>
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/rg_age"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/tv_age"
app:layout_constraintTop_toTopOf="@id/tv_age">
<RadioButton
android:paddingStart="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="18--25岁"
android:button="@drawable/rb_bg"
android:buttonTint="#f00"
android:textSize="30sp"/>
<RadioButton
android:paddingStart="20dp"
android:layout_marginTop="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:button="@drawable/rb_bg"
android:buttonTint="#f00"
android:text="26--40岁"
android:textSize="30sp"/>
<RadioButton
android:paddingStart="20dp"
android:layout_marginTop="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:button="@drawable/rb_bg"
android:buttonTint="#f00"
android:text="41--60岁"
android:textSize="30sp"/>
</RadioGroup>
<Button
android:id="@+id/btn_rb_ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="确定"
android:background="@drawable/pressresult"
android:paddingHorizontal="30dp"
android:paddingVertical="10dp"
android:textSize="30sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/rg_like"
android:layout_marginTop="40dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="26sp"
android:layout_marginTop="40dp"
android:text="喜欢此课吗?"
android:id="@+id/tv_like"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/rg_age"/>
<RadioGroup
android:id="@+id/rg_like"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/tv_like"
app:layout_constraintBottom_toBottomOf="@id/tv_like">
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="是"
android:button="@null"
android:background="@drawable/rb_nubutton"
android:paddingHorizontal="20dp"
android:paddingVertical="10dp"
android:textSize="26sp"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:paddingStart="20dp"
android:button="@null"
android:background="@drawable/rb_nubutton"
android:paddingHorizontal="20dp"
android:paddingVertical="10dp"
android:text="否"
android:textSize="26sp"/>
</RadioGroup>
</androidx.constraintlayout.widget.ConstraintLayout>

CheckBox

checkbox复选框

  • 在CheckBox复选框组中,允许同时选中多个
  • CheckBox复选按钮具有选中和未选中两种状态
  • CheckBox默认以矩形表示

测试样例代码

image-20220401144017638

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
62
63
64
package com.gallifrey.todayapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.RadioGroup;
import android.widget.Toast;

public class CheckBoxActivity extends AppCompatActivity {
private CheckBox mCb1,mCb2,mCb3,mCb4,mCb5,mCb6;
private Button mBnCbOk;
@SuppressLint("WrongViewCast")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyCheckBoxListener myCheckBoxListener=new MyCheckBoxListener();
setContentView(R.layout.activity_check_box);
mCb1=findViewById(R.id.cb1);
mCb2=findViewById(R.id.cb2);
mCb3=findViewById(R.id.cb3);
mCb4=findViewById(R.id.cb4);
mCb5=findViewById(R.id.cb5);
mCb6=findViewById(R.id.cb6);
mBnCbOk=findViewById(R.id.btn_cb_ok);
mCb1.setOnCheckedChangeListener(myCheckBoxListener);
mCb2.setOnCheckedChangeListener(myCheckBoxListener);
mCb3.setOnCheckedChangeListener(myCheckBoxListener);
mCb4.setOnCheckedChangeListener(myCheckBoxListener);
mCb5.setOnCheckedChangeListener(myCheckBoxListener);
mCb6.setOnCheckedChangeListener(myCheckBoxListener);

mBnCbOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String chooseCb="";
if(mCb1.isChecked())chooseCb+="\n"+mCb1.getText();
if(mCb2.isChecked())chooseCb+="\n"+mCb2.getText();
if(mCb3.isChecked())chooseCb+="\n"+mCb3.getText();
if(mCb4.isChecked())chooseCb+="\n"+mCb4.getText();
if(mCb5.isChecked())chooseCb+="\n"+mCb5.getText();
if(mCb6.isChecked())chooseCb+="\n"+mCb6.getText();
Toast.makeText(CheckBoxActivity.this,chooseCb,Toast.LENGTH_LONG).show();
}
});
}

private class MyCheckBoxListener implements CompoundButton.OnCheckedChangeListener{

@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if(compoundButton.isChecked()){
Toast.makeText(CheckBoxActivity.this,compoundButton.getText()+"Clicked",Toast.LENGTH_LONG).show();
}
}
}



}
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="10dp"
tools:context=".CheckBoxActivity">

<TextView

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="兴趣爱好: "
android:textSize="36sp"
android:layout_gravity="center"
android:textStyle="bold|italic" />
<CheckBox
android:id="@+id/cb1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="游泳"
android:layout_marginTop="20dp"
android:paddingStart="10dp"
android:textSize="30sp"/>
<CheckBox
android:id="@+id/cb2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="绘画"
android:layout_marginTop="20dp"
android:paddingStart="10dp"
android:textSize="30sp"/>
<CheckBox
android:id="@+id/cb3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="阅读"
android:button="@drawable/checkbox_bg"
android:buttonTint="#F80606"
android:layout_marginTop="20dp"
android:paddingStart="10dp"
android:textSize="30sp"/>
<CheckBox
android:id="@+id/cb4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="唱歌"
android:button="@drawable/checkbox_bg_round"
android:buttonTint="#2196F3"
android:layout_marginTop="20dp"
android:paddingStart="10dp"
android:textSize="30sp"/>
<CheckBox
android:id="@+id/cb5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="钢琴"
android:layout_marginTop="20dp"
android:button="@null"
android:background="@drawable/rb_nubutton"
android:paddingHorizontal="30dp"
android:paddingVertical="10dp"
android:textSize="30sp"/>
<CheckBox
android:id="@+id/cb6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="吉他"
android:layout_marginTop="20dp"
android:button="@null"
android:background="@drawable/rb_nubutton"
android:paddingHorizontal="30dp"
android:paddingVertical="10dp"
android:textSize="30sp"/>
<Button
android:id="@+id/btn_cb_ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_gravity="center"
android:textSize="30sp"
android:paddingHorizontal="40dp"
android:paddingVertical="10dp"
android:background="@drawable/pressresult"
android:text="确定"/>

</LinearLayout>

ToggleButton

ToggleButton开关控件

XML属性 对应方法 功能描述
android:checked setChecked(boolean) 设置按钮是否选中
android:textOff setTextOff(CharSequence) 设置按钮的状态关闭时所显示的文本
android:textOn setTextOn(CharSequence) 设置按钮的状态打开时所显示的文本

Switch

Switch开关控件

XML属性 对应方法 功能描述
android:checked setChecked(boolean) 设置按钮是否选中
android:textOff setTextOff(CharSequence) 设置按钮的状态关闭时所显示的文本
android:textOn setTextOn(CharSequence) 设置按钮的状态打开时所显示的文本
android:swichMinWidth setSwitchMinWidth(int) 设置开关的最小宽度
android:textStyle setSwitchTypeface(Typeface ,int ) 设置开关的文本风格
android:typeface setSwitchTypeface 设置开关的文本的字体风格
android:switchPadding setSwitchPadding(int) 设置开关与标题文本之间的空白
android:thumb setThumbResource(int) 用自定义的Drawable来绘制开关的开关按钮
android:track setTrackResource(int) 用自定义的Drawble来绘制开关的开关轨道

ImageView

ImgeView图片视图

  • imgeview用于显示图像资源
XML属性 对应方法 功能描述
android:adjustViewBounds setAdajustViewBounds(boolean) 是否保持长宽比
android:cropToPadding setCropToPadding(boolean) 截取指定区域用是否用空白代替
android:maxHeight setMaxHeight(int) 设置View的最大高度
android:maxWidth setMaxWidth(int) 设置View的最大宽度
android:src setImageResource(int) 设置ImageView显示的Drawable对象
android:scaleType setScaleType(ImageView.ScaleType) 设置图片如何缩放或者移动以适应ImageView的大小
  • scaleType属性取值
XML属性 效果
FIT_XY 不按比例缩放,拉伸填充整个ImageView
FIT_CENTER 按比例缩放让图片最长边和ImageView最长边相等
FIT_START 按比例缩放,图片靠上左对齐
FIT_END 按比例缩放,图片靠右下对齐
CENTER 中心点一致,不缩放
CENTER_CROP 拉伸填充,使最小边一致
CENTER_INSIDE 图片比ImageView大时缩小,缩小效果跟FIT_CENTER一致,实际上就是确保在里面
MATRIX 左上角开始绘制,可以设置各种平移,旋转等策略

测试样例代码

该测试样例包含ToggleButton,Switch和imageView的使用方法

image-20220401144057800

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package com.gallifrey.todayapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Matrix;
import android.os.Bundle;
import android.view.View;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.RadioGroup;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ToggleButton;

public class ToggleSwitchActivity extends AppCompatActivity {
private TextView mTvTbSw;
private ToggleButton mTb1,mTb2;
private Switch mSw1,mSw2;
private ImageView mIvTbSw;
private int count;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_toggle_switch);
mTb1=findViewById(R.id.tb1);
mTb2=findViewById(R.id.tb2);
mSw1=findViewById(R.id.sw1);
mSw2=findViewById(R.id.sw2);
mIvTbSw=findViewById(R.id.iv_tbsw);
mTvTbSw=findViewById(R.id.tv_tbsw);

MyTbSwCheckedChangeListener myTbSwCheckedChangeListener=new MyTbSwCheckedChangeListener();
mTb1.setOnCheckedChangeListener(myTbSwCheckedChangeListener);
mTb2.setOnCheckedChangeListener(myTbSwCheckedChangeListener);

mSw1.setOnCheckedChangeListener(myTbSwCheckedChangeListener);
mSw2.setOnCheckedChangeListener(myTbSwCheckedChangeListener);

mIvTbSw.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View view) {
String str="";
count++;
switch (count%8){
case 0:
str="FIT_CENTER";
mIvTbSw.setScaleType(ImageView.ScaleType.FIT_CENTER);
break;
case 1:
mIvTbSw.setScaleType(ImageView.ScaleType.FIT_START);
str="FIT_START";
break;
case 2:
mIvTbSw.setScaleType(ImageView.ScaleType.FIT_END);
str="FIT_END";
break;
case 3:
mIvTbSw.setScaleType(ImageView.ScaleType.FIT_XY);
str="FIT_XY";
break;
case 4:
mIvTbSw.setScaleType(ImageView.ScaleType.CENTER);
str="CENTER";
break;
case 5:
mIvTbSw.setScaleType(ImageView.ScaleType.CENTER_CROP);
str="CENTER_CROP";
break;
case 6:
mIvTbSw.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
str="CENTER_INSIDE";
break;
case 7:
mIvTbSw.setScaleType(ImageView.ScaleType.MATRIX);
str="MATRIX";
Matrix matrix=new Matrix();
matrix.setTranslate(100,100);
matrix.postRotate(30);
mIvTbSw.setImageMatrix(matrix);
break;
}

mTvTbSw.setText(str);
}
});

}

private class MyTbSwCheckedChangeListener implements CompoundButton.OnCheckedChangeListener{

@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {

if(compoundButton==mSw2){
mIvTbSw.setImageResource(R.mipmap.checkbox_round_1);
// mIvTbSw.setImageDrawable(getDrawable(R.mipmap.delect));
}else if(compoundButton==mTb2){
mIvTbSw.setImageResource(R.drawable.school);
}else if(compoundButton==mSw1){
mIvTbSw.setImageResource(R.drawable.longlongt);
}
if(compoundButton.isChecked()){
Toast.makeText(ToggleSwitchActivity.this,"打开",Toast.LENGTH_LONG).show();
}
}
}
}
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
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ToggleSwitchActivity">
<ToggleButton
android:id="@+id/tb1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="power"
android:checked="true"
android:textSize="30sp"/>
<ToggleButton
android:id="@+id/tb2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOff="关"
android:textOn="开"
android:layout_marginTop="20dp"
android:layout_below="@id/tb1"
android:textSize="30sp"/>
<Switch
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/sw1"
android:layout_toEndOf="@id/tb1"
android:layout_marginStart="40dp"
android:switchMinWidth="100dp"/>

<Switch
android:id="@+id/sw2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignStart="@id/sw1"
android:layout_alignTop="@id/tb2"
android:switchMinWidth="150dp"
android:thumb="@drawable/thumb"
android:checked="true"
android:track="@drawable/track" />

<ImageView
android:id="@+id/iv_tbsw"
android:layout_width="300dp"
android:layout_height="300dp"
android:layout_below="@id/tb2"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:background="#C9E91E63" />
<TextView
android:id="@+id/tv_tbsw"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:layout_centerHorizontal="true"
android:layout_below="@id/iv_tbsw"
android:layout_marginTop="20dp"/>
</RelativeLayout>

Dialog

Dialog对话框

Android提供了丰富的对话框支持,其中常用的对话框有4种:

  • AlertDialog提示对话框
  • ProgressDialog进度条对话框
  • DatePickerDialog日期对话框
  • TimePickerDialog时间对话框

层次关系图

image-20220401174105146

AlertDialog提示对话框

  • AlertDialog继承自Dialog类
  • 使用Builder内部类进行创建
  • 可以包含一个标题、一个内容消息或者一个选择列表以及0至3个按钮
方法 功能描述
void create() 根据设置的属性,创建一个AlterDialog
void show() 根据设置的属性,显示已创建的AlterDialog
AlterDialog.Builder setTitle() 设置标题
AlterDialog.Builder setIcon() 设置标题的图标
AlterDialog.Builder setMessage() 设置标题的内容
AlterDialog.Builder setCancelable() 设置是否模态
AlterDialog setPositiveButton() 为对话框添加Yes按钮
AlterDialog setNegativeButton 为对话框添加No按钮

ProgressDialog进度对话框

  • ProgressDialog有两种显示方式:

    • 滚动的环状图标
    • 带刻度的进度条
  • 通过ProgressDialog.setProgressStyle()方法进行设置:

    • STYLE_HORIZONTAL——刻度滚动
    • STYLE_SPINNER——图标滚动,默认选项

测试样例代码

image-20220401175828047

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
package com.gallifrey.todayapplication;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import java.util.ArrayList;

public class DialogActivity extends AppCompatActivity {
private Button mBtnNormal, mBtnList, mBtnSingle, mBtnMulti, mBtnEdit, mBtnCustom;
private Button mBtnCircle,mBtnhori;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dialog);
mBtnNormal = findViewById(R.id.btn_normal);
mBtnList = findViewById(R.id.btn_list);
mBtnSingle = findViewById(R.id.btn_single);
mBtnMulti = findViewById(R.id.btn_multi);
mBtnEdit = findViewById(R.id.btn_edit);
mBtnCustom = findViewById(R.id.btn_custom);
mBtnCircle =findViewById(R.id.btn_circle_progress);
mBtnhori=findViewById(R.id.btn_hori_progress);


MyDialogClickListener myDialogClickListener = new MyDialogClickListener();
mBtnCustom.setOnClickListener(myDialogClickListener);
mBtnNormal.setOnClickListener(myDialogClickListener);
mBtnSingle.setOnClickListener(myDialogClickListener);
mBtnEdit.setOnClickListener(myDialogClickListener);
mBtnMulti.setOnClickListener(myDialogClickListener);
mBtnList.setOnClickListener(myDialogClickListener);
mBtnhori.setOnClickListener(myDialogClickListener);
mBtnCircle.setOnClickListener(myDialogClickListener);
}


private class MyDialogClickListener implements View.OnClickListener {

@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_normal:
normalDialog();
break;
case R.id.btn_list:
listDialog();
break;
case R.id.btn_single:
singleDialog();
break;
case R.id.btn_multi:
multiDialog();
break;
case R.id.btn_edit:
editDialog();
break;
case R.id.btn_custom:
customDialog();
break;
case R.id.btn_hori_progress:
horiProgressDialog();
break;
case R.id.btn_circle_progress:
circleProgressDialog();
}
}

}

private void circleProgressDialog() {
ProgressDialog circleD=new ProgressDialog(this);
circleD.setIcon(R.mipmap.icon_dialog);
circleD.setTitle("环状滚动条");
circleD.setMessage("努力加载中.......");
circleD.setProgressStyle(ProgressDialog.STYLE_SPINNER);//不写这个,也是默认环形滚动条
circleD.show();
}

private void horiProgressDialog() {
ProgressDialog horiProgress=new ProgressDialog(this);
horiProgress.setIcon(R.mipmap.icon_dialog);
horiProgress.setTitle("水平滚动条");
horiProgress.setMessage("努力加载中......");
horiProgress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
horiProgress.setProgress(0);//初始进度值
horiProgress.setMax(100);//最大进度值
horiProgress.setSecondaryProgress(3);//二级进度条
horiProgress.setButton(DialogInterface.BUTTON_POSITIVE, "确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(DialogActivity.this,"点击确定",Toast.LENGTH_LONG);
dialogInterface.cancel();
}
});
horiProgress.show();
new Thread(new Runnable() {
@Override
public void run() {
while(horiProgress.getProgress()<horiProgress.getMax()){
try {
Thread.sleep(100);
horiProgress.incrementProgressBy(1);//每100毫秒增加1
horiProgress.incrementSecondaryProgressBy(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}

private void customDialog() {
View view= LayoutInflater.from(this).inflate(R.layout.layout_custom,null,false);
AlertDialog.Builder customD=new AlertDialog.Builder(this);
EditText etUser=view.findViewById(R.id.et_user);
Button mBtnCustomOk=view.findViewById(R.id.btn_custom_ok);
customD.setView(view).show();
mBtnCustomOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(DialogActivity.this,etUser.getText(),Toast.LENGTH_LONG).show();
}
});
}

private void editDialog() {
AlertDialog.Builder editD=new AlertDialog.Builder(this);
EditText editText=new EditText(this);
editD.setIcon(R.mipmap.icon_dialog)
.setTitle("输入对话框")
.setView(editText)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(DialogActivity.this,"内容: "+editText.getText(),Toast.LENGTH_LONG).show();
}
})
.show();
}

ArrayList<Integer> choices =new ArrayList<>();
private void multiDialog() {

String[] items={"绘画","唱歌","足球","吉他"};
boolean[] checkedItems={true,false,false,true};
choices.clear();
choices.add(0);
choices.add(3);
AlertDialog.Builder multiD=new AlertDialog.Builder(this);
multiD.setIcon(R.mipmap.icon_dialog)
.setTitle("多选对话框")
.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i, boolean b) {
if(b){
choices.add(i);
}else{
choices.remove(Integer.valueOf(i));
}
}
}).setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
StringBuilder str=new StringBuilder();
for (int j = 0; j < choices.size(); j++) {
str.append(items[choices.get(j)]+" ");
}
Toast.makeText(DialogActivity.this,"兴趣爱好:"+str,Toast.LENGTH_LONG).show();
}
}).show();
}

private void singleDialog() {
String[] items ={"优秀","良好","合格","不合格"};
AlertDialog.Builder singleD=new AlertDialog.Builder(this);
final int[] choice = new int[1];
singleD.setIcon(R.mipmap.icon_dialog)
.setTitle("单选对话框")
.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
choice[0] =i;

}
}).setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(DialogActivity.this,"单选结果: "+items[choice[0]],Toast.LENGTH_LONG).show();
}
}).show();
}

private void listDialog() {
String[] items={"梅花","杏花","桃花","荷花","蔷薇","烟花"};
AlertDialog.Builder listD=new AlertDialog.Builder(this);
listD.setIcon(R.mipmap.icon_dialog2)
.setTitle("列表对话框")
.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(DialogActivity.this,"花: "+items[i],Toast.LENGTH_LONG).show();
}
}).show();

}


private void normalDialog() {
AlertDialog.Builder normalD = new AlertDialog.Builder(this);
normalD.setIcon(R.mipmap.icon_dialog)
.setTitle("普通对话框")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(DialogActivity.this, "Ok", Toast.LENGTH_LONG).show();
}
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(DialogActivity.this, "OK", Toast.LENGTH_LONG).show();
}
}).setNeutralButton("再看看", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(DialogActivity.this, "OK", Toast.LENGTH_LONG).show();
}
}).show();
}
}
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:paddingTop="20dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".DialogActivity">

<Button
android:layout_width="300dp"
android:layout_height="wrap_content"
android:id="@+id/btn_normal"
android:text="普通对话框"
android:textSize="30sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<Button
android:layout_width="300dp"
android:layout_height="wrap_content"
android:id="@+id/btn_list"
android:text="列表对话框"
android:textSize="30sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/btn_normal"
android:layout_marginTop="10dp"
/>

<Button
android:layout_width="300dp"
android:layout_height="wrap_content"
android:id="@+id/btn_single"
android:text="单选对话框"
android:textSize="30sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/btn_list"
android:layout_marginTop="10dp"
/>
<Button
android:layout_width="300dp"
android:layout_height="wrap_content"
android:id="@+id/btn_multi"
android:text="多选对话框"
android:textSize="30sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/btn_single"
android:layout_marginTop="10dp"
/>
<Button
android:layout_width="300dp"
android:layout_height="wrap_content"
android:id="@+id/btn_edit"
android:text="输入对话框"
android:textSize="30sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/btn_multi"
android:layout_marginTop="10dp"
/>

<Button
android:layout_width="300dp"
android:layout_height="wrap_content"
android:id="@+id/btn_custom"
android:text="自定义对话框"
android:textSize="30sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/btn_edit"
android:layout_marginTop="10dp"
/>
<Button
android:layout_marginTop="10dp"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:text="环状滚动条"
android:textSize="30sp"
android:id="@+id/btn_circle_progress"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/btn_custom"/>
<Button
android:layout_marginTop="10dp"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:text="水平滚动条"
android:textSize="30sp"
android:id="@+id/btn_hori_progress"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/btn_circle_progress"/>

</androidx.constraintlayout.widget.ConstraintLayout>
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
62
63
64
65
66
67
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="10dp"
android:paddingStart="10dp"
android:paddingEnd="10dp"
tools:context=".EditTextActivity">

<TextView
android:id="@+id/tv_user"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="用户名: "

android:textSize="30sp" />

<EditText
android:paddingStart="10dp"
android:id="@+id/et_user"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBaseline="@id/tv_user"
android:layout_toEndOf="@id/tv_user"
android:hint="请输入号码"
android:inputType="phone"
android:textSize="30sp"
android:background="@drawable/bgeditext"

/>
<TextView
android:id="@+id/tv_pwd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tv_user"
android:layout_alignStart="@id/tv_user"
android:layout_marginTop="40dp"
android:text="密 码: "
android:textSize="30sp" />

<EditText
android:id="@+id/et_pwd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/et_user"
android:layout_alignBaseline="@id/tv_pwd"
android:layout_toEndOf="@id/tv_pwd"
android:background="@drawable/bgeditext"
android:paddingStart="10dp"
android:drawablePadding="5dp"
android:hint="请输入密码"
android:inputType="textPassword"
android:textSize="30sp" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:layout_below="@id/tv_pwd"
android:id="@+id/btn_custom_ok"
android:paddingHorizontal="60dp"
android:layout_centerHorizontal="true"
android:textSize="30sp"
android:text="确定"
android:background="@drawable/pressresult"/>
</RelativeLayout>