view:
处理文本内容(TextView)、点击(Button)、处理图片内容(ImageView)、接收用户信息输入(EditView)、进度条类(ProgressBar)
控件的通用属性
属性 | 常用可选值 |
---|---|
android:layout_width、android:layout_height | match_parent 填充整个父容器、wrap_content 根据所含内容确定、正整数单位dp,精确大小 |
android:id | @id/valName 使用已存在id、@+id/valName添加新的id |
android:layout_margin、android:padding | 正整数单位dp,精确大小 |
android:background | 十六进制颜色值,颜色作为背景,@mipmap/reaourceID图片作为背景 |
android:layout_gravity、android:gravity | center_horizontal水平居中、center_vertical垂直居中、center水平垂直居中、left居左、right居右、top居顶、bottom居底 |
android:visibility | visible 可见状态、invisible 不可见状态但保留控件位置、gone不可见状态也不保留位置 |
1.TextView
android:textSize="22sp"//设置字体大小
android:textColor="#00ffff"//设置颜色
android:lineSpaceMultiolier="2"//字倍距
ScorllView滚动条(但是只能放一个控件)
android:singleLine="true"//设置单行
android:focusable="true"//设置可以获得焦点
android:ellipsize="start"//设置省略号位置
android:focusableInTouchMode="true"//设置在触摸时获得焦点
android:marqueeRepeatLinit="marquee_forever"//设置跑马灯时长
2.EditView
android:inputType//输入情况、如:text、textpassworf
android:hint//输出提示
android:maxLength//最大长度
android:autofillHints //是 Android 8.0(API 级别 26)及以上版本引入的一个重要属性,其主要作用是为自动填充系统提供明确的提示信息,从而让系统能够准确识别界面元素所期望填充的数据类型。通过合理使用该属性,用户可以更便捷地完成表单填写,无需手动输入重复信息。
android:contentDescription//主要功能是为界面元素提供文本描述,从而方便视力障碍用户借助屏幕阅读器理解元素用途。
3.ImageView
用来显示和控制图像的控件,可以对他进行放大、缩小、旋转等操作,常用属性有src、background
android:src=""//指定前景图片资源,图片不会变形
android:background=""//设置背景,图片可能会变形
4.Button
4.1.注册点击事件的方法
自定义内部类、匿名内部类、当前Activity去实现事件接口、在布局文件中添加点击事件属性
自定义内部类
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_button);
Button btn1 = findViewById(R.id.btn1);
myListener ml = new myListener();
btn1.setOnClickListener(ml);
}
class myListener implements View.OnClickListener{
@Override
public void onClick(View v) {
Log.e("TAG", "点击");
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="自定义内部类"/>
</LinearLayout>
4.2.匿名内部类//适用于有唯一的操作的按钮
Button btn2 = findViewById(R.id.btn2);
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e("TAG", "onClick:匿名 " );
}
});
<Button
android:id="@+id/btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="匿名内部类"/>
4.3.事件(当前Activity去实现事件接口)
public class ButtonActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_button);
Button btn3 =findViewById(R.id.btn3);
btn3.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Log.e("TAG", "onClick:本类 " );
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/btn3"
android:layout_marginTop="40dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="本类实现"/>
</LinearLayout>
4.4.xml点击事件
//(View v)参数,被点击的控件对象
public void myClick (View v){
Log.e("TAG", "instance initializer: xml");
}
<Button
android:layout_marginTop="40dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="myClick"
android:text="xml实现"/>
5.ProgressBar
进度条,默认情况下是圆形,没有刻度,只是一个不断旋转的动画效果,通过设置style,可以显示传统的水平带刻度进度条
初始:
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
一条线:
<ProgressBar
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleHorizontal"//样式设置
android:progress="50"//进度条的进度,默认是100,但可以通过android:max=“”修改默认
//android:indeterminate="true"进度条滚动
/>
可以采用java线程来实现进度条递进
ProgressBar pb = findViewById(R.id.progress_time);
new Thread(){
public void run(){
for(int i=0;i<=100;i++){
pb.setProgress(i);
}
try {
Thread.sleep(1000000000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}.start();
<ProgressBar
android:id="@+id/progress_time"
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleHorizontal"
/>
控件例子,点击按钮后,判断登录账号密码是否为空
package com.example.myapplication;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle saveInstanceState){
super.onCreate(saveInstanceState);
setContentView(R.layout.activity_main);
getSupportActionBar().hide();
// Button btn1 = findViewById(R.id.login_btn1);
}
public void login_click(View v){
Log.e("TAG", "执行成功");
EditText name = findViewById(R.id.name);
EditText password = findViewById(R.id.password);
String nan = name.getText().toString();
String pwd = password.getText().toString();
if(nan.equals("") || pwd.equals("")){
Toast.makeText(this,"账号或密码不能为空",Toast.LENGTH_SHORT).show();
Log.e("TAG", "login: 账号密码不能空");
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_marginTop="40dp"
android:layout_width="60dp"
android:layout_height="60dp"
android:src="@mipmap/ic_launcher"/>
<EditText
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="50dp"
android:inputType="text"
android:text="name"
android:autofillHints="name" />
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="50dp"
android:inputType="textPassword"
android:text="password"
android:autofillHints="password" />
<Button
android:id="@+id/login_btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="login_click"
android:text="点击事件"/>
</LinearLayout>
6.CheckBox
1.系统封装的复选控件
2.两种状态:选中及未选中setChecked() isChecked();
3.监听状态变化:setOnCheckedChangeListener
CheckBox cb = findViewById(R.id.checkbox);
//设置是否选中状态
cb.setChecked(false);
//获取他的状态
boolean isChecked = cb.isChecked();
<CheckBox
android:id="@+id/checkbox"
android:layout_width="100dp"
android:layout_height="40dp"
android:text="nihao"
/>
监听变化
cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Log.d("TAG", "onCheckedChanged: "+isChecked);
}
});
7.RadioButton
1.单选控件
2.可以和RadioGroup一起使用,只能选择一个
使用例子:
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<RadioButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="nihao"/>
<RadioButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="buhao"/>
</RadioGroup>
8.ToggleButton
1.切换程序中的状态
2.两种状态
(1)android:textOn
(2)android:textOff
3.setChecked(boolean)
setOnCheckedChangeListener
例子:
<ToggleButton
android:layout_width="match_parent"
android:layout_height="60dp"
android:textOn="nihao"
android:textOff="buhao"
android:checked="true"
/>
在setChecked(boolean)和setOnCheckedChangeListener中使用有点类似于checkbox,不再次说明。