@TOC
| Android中所有控件的顶层基类view的常用属性 | 说明 | |--|--| |android:id|设置控件的标识符号| |android:layout_width|组件的宽度,一般写:wrap_content或者match_parent(fill_parent),前者是控件显示的内容多大,控件就多大,而后者会填满该控件所在的父容器;当然也可以设置成特定的大小,比如我这里为了显示效果,设置成了200dp| |android:layout_height|设置子组件的布局高度| |android:background|设置控件的背景色| |android:onClick|设置控件的单击事件绑定监听器| |android:visibility|设置控件是否可见| |android:alpha|设置控件透明度(0-1之间的数值)| |android:padding|设置子组件的内边距| |android:layout_margin|设置子组件的外边距| |android:visibility |visible:可见;invisible:不可见,但仍然占据原来的屏幕空间;gone:不可见,也不会占据屏幕空间|
一、文本类组件
TextView文本框组件
| 属性 | 作用 | |--|--| |android:text|设置组件显示内容,属性值建议使用string.xml资源文件进行设置然后调用| |android:textSize|设置文字大小,属性值为n sp,n为任意正整数,sp是文字大小单位| |android:textColor|设置文字颜色(通过colors.xml资源来引用),属性值可以使用预设好的属性值也可以自行使用类似#FFFFFF的格式进行调整,在图形界面调整时,RGB代表不透明颜色,ARGB代表可透明颜色
6位(#000000)就是RGB值(红绿蓝)
8位(#1e000000)头两位是透明度,后6位是RGB值,00是完全透明,ff是完全不透明,比较适中的透明度值是 1e| |android:singleLine|设置组件单行显示,属性值为true或者false| |android:maxWidth |设置组件的最大宽度| |android:textStyle|设置字体风格,三个可选值:normal(无效果),bold(加粗),italic(斜体)| |android:gravity|设置控件中内容的对齐方向,TextView中是文字,ImageView中是图片等等| |android:background|控件的背景颜色,可以理解为填充整个控件的颜色,可以是图片|
EditText编辑框组件
EditText是TextView的子类,所以TextView有的属性EditText同样也有。 | 属性 | 作用 | |--|--| |android:hint|设置编辑框输入提示,当编辑框没有任何输入时显示提示内容| |android:inputType|设置输入数据类型,可选值:textPassword(密码),number(数字)等| |android:drawableLeft:|在编辑框左侧绘制一个图像,其他绘制方向以及start和end的使用方法等同于之前的组件| |android:drawablePadding|设置上一个绘制的图像的内边距| |android:lines|设置编辑框的输入行数限制为n,超过将会自动隐藏并允许向上滚动,属性值为正整数| |android:textColorHint|提示文字的颜色。| |android:maxLength|限制文本的最大长度,超出部分将不会显示。| |android:digits|限制能够输入的字符。| |android:textCursorDrawable|设置光标样式|
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:digits="0123456789*#"
android:hint="只能输入0123456789*#" />
editText.getText();获取编辑框组件的内容
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.one);
EditText et = findViewById(R.id.et1);
System.out.println(et.getText());//获取编辑框的内容
}
二、按钮类组件
Button普通按钮组件
|属性| 说明 | |--|--| |android:text |用于设置按钮上显示的内容,属性值同上 | |android:textAllCaps |用于控制按钮显示文字是否全部大写,默认为true,属性值为true或者false | |android:onClick |设置单击按钮时触发的自定义函数,另一种方法是在Java文件中为按钮 |
添加事件监听器: 1. 通过匿名内部类作为事件监听器类,这种方法适用于事件监听器只是临时使用一次,因为大部分时候,事件处理器都没有什么利用价值(可利用代码通常都被抽象成了业务逻辑方法),这是一种使用最广泛的方法: 方法一:匿名内部类
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.one);
Button btn = findViewById(R.id.btn1);
//为button按钮注册监听器,并通过匿名内部类实现
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"点击了按钮1",Toast.LENGTH_SHORT).show();
}
});
}
- 使用实现接口的方式来进行注册,让Activity类实现了View.OnClickListener事件监听接口,并重写onClick()方法,然后在调用button的setOnClickListener()方法将MainActivity的实例传进去。这样每当点击按钮时,就会执行onClick()方法中的代码:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.one);
Button btn1 = findViewById(R.id.btn1);
Button btn2 = findViewById(R.id.btn2);
//将MainActivity的实例传进去
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
}
//重写onClick()方法,用switch区分是哪个id
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn1:
Toast.makeText(MainActivity.this,"点击了按钮1",Toast.LENGTH_SHORT).show();
break;
case R.id.btn2:
Toast.makeText(MainActivity.this,"点击了按钮2",Toast.LENGTH_SHORT).show();
break;
}
}
}
- onClick属性
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn2"
android:onClick="myClick"
android:text="按钮2"/>
public void myClick(View view){
Toast.makeText(MainActivity.this,"点击了按钮2",Toast.LENGTH_LONG).show();
}
ImageButton图片按钮组件
|属性 |说明 | |--|--| |android:src|设置图片按钮显示内容| |android:background = "#0000" |背景设置透明| |android:scaleType="fitXY"|把原图按照指定的大小在View中显示,拉伸显示图片,不保持原比例,填满|
RadioButton单选按钮
在 RadioButton 没有 被选中时,用户通过单击来选中它。但是,在选中后,无法通过单击取消选中。
RadioGroup 是单选组合框,用于 将 RadioButton 框起来。在多个 RadioButton被 RadioGroup 包含的情况下,同一时刻只可以选择一个 RadioButton。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<RadioGroup
android:id="@+id/radio_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
//设置RadioButton的排列方式,分为水平排列horizontal与垂直排列vertical
>
<RadioButton
android:id="@+id/rd1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="男"
/>
<RadioButton
android:id="@+id/rd2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"//默认选中状态
android:text="女"
/>
<RadioButton
android:id="@+id/rd3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="东方不败"
android:textStyle="normal"
//normal,bold,italic分别为正常,加粗以及斜体,默认为normal
/>
</RadioGroup>
</LinearLayout>
- 用 setOnCheckedChangeListener 来对 RadioGroup 进行监听的代码(选中状态改变的监听器)
public class MainActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.one);
//设置选中状态改变的监听器
RadioGroup radioGroup = findViewById(R.id.radio_group);
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
//checkedId被选中的单选框的id值
RadioButton radioButton= findViewById(checkedId);
Toast.makeText(MainActivity.this,"性别:"+radioButton.getText(),Toast.LENGTH_SHORT).show();
}
});
}
}
- 通过点击其他按钮进行监听
public class MainActivity extends AppCompatActivity{
RadioGroup radioGroup;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.one);
radioGroup = findViewById(R.id.radio_group);
//通过点击其他按钮进行监听
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//遍历单选按钮,判断是否被选中
for(int i = 0;i<radioGroup.getChildCount();i++){
//获取第i个单选按钮
RadioButton radioButton = (RadioButton)radioGroup.getChildAt(i);
if(radioButton.isChecked()){
Toast.makeText(MainActivity.this,"性别:"+radioButton.getText(),Toast.LENGTH_SHORT).show();
break;
}
}
}
});
}
}
CheckBox复选按钮
CheckBox在布局文件中的常用的属性以及用法:
<CheckBox
android:id="@+id/check_box1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="篮球"
android:checked="true"
/>
<CheckBox
android:id="@+id/check_box2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="足球"
/>
<CheckBox
android:id="@+id/check_box3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="乒乓球"
/>
设置监听器,对每一个多选按钮进行事件监听 setOnCheckedChangeListener,通过 isChecked 来判断 选项是否被选中,做出相应的事件响应。
public class MainActivity extends AppCompatActivity{
CheckBox checkBox1;
CheckBox checkBox2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.one);
checkBox1 = findViewById(R.id.check_box1);
checkBox2 = findViewById(R.id.check_box2);
//为第一个复选框设置状态改变监听器
checkBox1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(checkBox1.isChecked()){
Toast.makeText(MainActivity.this,checkBox1.getText(),Toast.LENGTH_SHORT).show();
}
}
});
//为第二个复选框设置状态改变监听器
checkBox2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(checkBox2.isChecked()){
Toast.makeText(MainActivity.this,checkBox2.getText(),Toast.LENGTH_SHORT).show();
}
}
});
}
}
DatePicker 日期选择器
文件布局代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<DatePicker
android:id="@+id/datepicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
创建监听日期改变监听器
public class MainActivity extends AppCompatActivity{
int year,month,day;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.one);
DatePicker datePicker = findViewById(R.id.datepicker);
//获取Calendar类的实例化对象
Calendar calendar = Calendar.getInstance();
year = calendar.get(Calendar.YEAR);
//月份在Calendar中是从0开始的,也就是说1月份的值为0,因此需要加1才是现实中表示的月份
month = calendar.get(Calendar.MONTH)+1;
day = calendar.get(Calendar.DAY_OF_MONTH);
//监听日期改变
datePicker.init(year, month, day, new DatePicker.OnDateChangedListener() {
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
//显示改变后的时间
show(year,monthOfYear,dayOfMonth);
}
});
/*
//效果同上
datePicker.setOnDateChangedListener(new DatePicker.OnDateChangedListener() {
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
//显示改变后的时间
show(year,monthOfYear,dayOfMonth);
}
});
*/
}
private void show(int year,int month,int day){
String str = year+"年"+month+"月"+day+"日";
Toast.makeText(MainActivity.this,str,Toast.LENGTH_SHORT).show();
}
}
TimePicker 时间选择器
布局文件代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TimePicker
android:id="@+id/time_picker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
添加改变时间的监听器
public class MainActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.one);
TimePicker timePicker = findViewById(R.id.time_picker);
timePicker.setIs24HourView(true);//将其设置为24小时制(默认为12小时制)
timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
String str = hourOfDay+"时"+minute+"分";
Toast.makeText(MainActivity.this,str,Toast.LENGTH_SHORT).show();
}
});
}
}
Chronometer计时器
常用方法:
布局文件代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<Chronometer
android:id="@+id/chronometer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:format="已用时间:%s"/>
</LinearLayout>
添加监听器,计时大于60秒停止计时
public class MainActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.one);
Chronometer chronometer = findViewById(R.id.chronometer);
//设置起始时间为当前时间
chronometer.setBase(SystemClock.elapsedRealtime());
//设置显示格式
chronometer.setFormat("%s");
//开始计时
chronometer.start();
chronometer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
@Override
public void onChronometerTick(Chronometer chronometer) {
//如果当前时间 - 计时器的起始时间 >= 60秒
if(SystemClock.elapsedRealtime()-chronometer.getBase()>=60000){
//停止计时
chronometer.stop();
}
}
});
}
}