<TextView
android:id="@+id/tv_this_text" id便于java代码中查找该控件
android:layout_width="match_parent" 匹配父控件大小
android:layout_height="wrap_content" 匹配内容大小
android:text="这是一个TextView"
android:textSize="20sp"
android:gravity="center" layout_gravity定义的是控件在父布局中的相对位置
android:textStyle="bold" 加粗显示
android:background="#80A3D15F"
/>
单独设置其中一个参数是没有效果的,这几个参数合起来才能看出对应的效果
<TextView
android:id="@+id/tv_shadow_text"
...
android:text="This is a shadow text view"
...
android:shadowColor="#E4E3365C" 阴影颜色
android:shadowDx="10.0" 阴影x y偏移量
android:shadowDy="10.0"
android:shadowRadius="3.0" 阴影模糊效果
/>
<TextView
... text长度要大于控件长度
android:text="This is a running text view, single line can be runnable!"
...
android:maxLines="1" 最大行数
android:ellipsize="marquee" 跑马灯效果,end start middle都是省略号展示方式
android:marqueeRepeatLimit="marquee_forever" 循环次数无限次
android:focusable="true" 获取焦点
android:focusableInTouchMode="true"
android:clickable="true" 是否可点击
/>
上边的方法需要点击一次文字才会滚动,要实现自动滚动,可以用下边的方法
方法1: 自定义view重写isFocused()方法,直接返回true
//继承自TextView,实现构造器
@Override
public boolean isFocused() {
return true;
}
方法2: 在布局文件中申请焦点
<TextView
...
...>
<requestFocus/>
/>
<Button
android:layout_width="200dp" 宽高属性
android:layout_height="100dp"
android:text="Button 1" Button文字属性
android:textSize="25sp" 文字大小
android:background="#66558833" 背景颜色
/>
先res/drawable
文件中新建一个状态选择器,在根据需要定义不同的
属性
//注意这里是新建在res/drawable文件中的btn_select.xml文件
<selector xmlns:android="http://schemas.android.com/apk/res/android">
//按下时显示这个drawable
<item android:drawable="@drawable/btn_select_drawable" android:state_pressed="true"/>
//松开默认时显示这个drawable
<item android:drawable="@drawable/btn_default_drawable" android:state_pressed="false"/>
selector>
//布局中的Button控价
<Button
...宽高、文字等配置
android:background="@drawable/btn_select" 直接引用选择器资源即可
/>
与状态选择器类似颜色选择器也是让Button控件访问drawable中的资源
首先在res
文件夹中新建color
文件夹,然后在res/color
目录下新建颜色选择器
//res/drawable/btn_color_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
//选中与未选中的颜色
<item android:color="#66ee3344" android:state_pressed="true"/>
<item android:color="@color/purple_700" android:state_pressed="false"/>
selector>
<Button
...宽高等属性
android:background="@drawable/btn_select"
android:backgroundTint="@color/btn_color_selector" 直接引用布局文件
/>
补充:
foregroundTint
,以下是三者的关系名称 | 作用/解释 |
---|---|
drawable | 引用的Drawable位图 |
state_focused | 是否获得焦点 |
state_pressed | 控价是否被按下 |
state_enabled | 控件是否可用 |
state_selected | 控件是否被选择,针对有滚轮的情况 |
state_checked | 控件是否被勾选 |
state_checkable | 控件是否可以被勾选 |
state_window_focused | 是否获得窗口焦点 |
state_active | 控件是否处于活动状态 eg: slidingTab |
state_single | 包含多个子控件时,确定是否只选择一个子控件 |
state_first | 包含多个子控件时,确定第一个子控件是否为显示状态 |
state_middle | 多个子控件时,确定中间一个子控件处于显示状态 |
state_last | 多个子控件,确定最后一个处于显示状态 |
onTouch()-->onLonclick()-->onClick()
true
即事件被消费,那么事件就不会传递到后边的点击事件当中setOnClickListener()
方法来定义点击事件click标签
之后在对应的activity中实现对应click标签
的方法来实现Button buttonClick = findViewById(R.id.btn_click_event);
//方法1:通过setonClickListner()方法实现点击
buttonClick.setOnClickListener(view -> {
//点击事件
Log.e(TAG, "onClick");
/**事件传递顺序onTouch->onLongClick->onClick
如果前边的任意一个事件被消费,那都不会走到onClick里边来
*/
});
//方法2:
//先在xml中添加对应的标签
/*
*/
//再在对应需要响应的布局中添加同名的Click方法
public void clickTest(View view) {
Log.e(TAG, "clickTest");
}
setLongClickListener()
方法实现buttonClick.setOnLongClickListener(view -> {
//长按事件
Log.e(TAG, "onLongClick");
//长按事件的返回值为true,也不会再往onClick传递
return false;
});
onTouch()
事件,优先级最高,并且可以通过motionEvent
参数来获取点击的类型,按下的坐标,按下的状态等信息,做更多的多样化处理buttonClick.setOnTouchListener((view, motionEvent) -> {
//触摸事件
int action = motionEvent.getAction();
String actionStr = getActionStr(action);
Log.e(TAG, actionStr);
//这里返回为true的话代表事件被消费不再往下传递
return false;
});
private String getActionStr(int action) {
String str;
switch (action) {
case MotionEvent.ACTION_DOWN:
str = "ACTION_DOWN";
break;
...
}
return str;
}
名称 | 作用 |
---|---|
android:hint | 提示文字 |
android:textColorHint | 提示文字的颜色 |
android:inputType | 输入内容的类型-密码/文字/数字等 |
android:drawableXxxx | 在输入框的指定方位添加drawable |
android:drawablePadding | 设置图片与输入内容的间距大小 |
```android:paddingXxxx | 内容与边框的间距大小 |
其它很多属性与TextView和Button都是通用的就不一一列举
<EditText
android:id="@+id/et_pass_word"
...
android:hint="Please input your password !" 提示文字
android:drawableLeft="@drawable/ic_password_24" icon图标
android:backgroundTint="@color/btn_color_selector"
android:drawablePadding="15dp" 图标边距
android:inputType="textPassword"/> 输入的内容的类型
输入内容结合Button可以做出按下按钮实现查看密码的功能
passWord = findViewById(R.id.et_pass_word);
Button seePass = findViewById(R.id.btn_see_pass_word);
seePass.setOnTouchListener((view, motionEvent) -> {
runOnUiThread(() -> {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
passWord.setInputType(InputType.TYPE_CLASS_TEXT);
}
if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
passWord.setInputType(129);
}
//移动光标与刷新
passWord.setSelection(passWord.getText().length());
passWord.invalidate();
});
return false;
});
}
或者做出输入密码纠错的功能
public void checkPass(View view) {
//点击按钮时获取内容,与需要的值比对,进而验证账号密码是否是正确的
if (!"iFinder".equals(userName.getText()) || !"123".equals(passWord.getText())) {
runOnUiThread(() -> {
userName.setTextColor(getResources().getColor(R.color.red));
passWord.setTextColor(getResources().getColor(R.color.red));
userName.invalidate();
passWord.invalidate();
});
}
}
最终效果
属性 | 作用 |
---|---|
android:src | 设置图片的资源 |
android:scaleType | 设置图片的缩放类型 |
android:maxHeight | 最大高度 |
android:maxWidth | 最大宽度 |
android:adjustViewBounds | 是否调整View的界限 |
类型名 | 具体作用 |
---|---|
fitStart | 保持宽高比缩放图片,直到较长的边与View的边长相等,完成后将图片放在View的左上角 |
fitCenter | 默认值,缩放规则同上,但完成后放于View中间 |
fitEnd | 缩放规则同上,但我弄成后放于View右下角 |
fitXY | 对图像的XY方向分别进行缩放,使得图片完全填满View,但是宽高比可能会发生改变 |
center | 保持原图大小,显示在View的中心,原图大于View大小时直接进行剪裁处理 |
centerCrop | 保持宽高比缩放图片直至完全覆盖View,可能会出现图片显示不全 |
centerInside | 保持宽高比缩放图片,只要能完全显示就停止,不一定适配View宽高 |
matrix | 不改变原图的大小,从View的左上角开始绘制原图,超出部分做相应的剪裁处理 |
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_user_500"
android:scaleType="matrix"
android:maxHeight="300dp"
android:maxWidth="300dp"
android:adjustViewBounds="true"/>
标签 | 说明 |
---|---|
android:max | 进度条可显示的最大值 |
android:progress | 进度条当前已完成值 |
android:indeterminate | 是否显示精确进度, 不显示时有类似跑马灯的等待效果 |
android:style | 设置进度条的风格 |
<ProgressBar
android:id="@+id/pb_show_hint"
android:layout_width="match_parent"
android:layout_height="50dp"/>
//默认时圆圈等待的样式
<ProgressBar
...id 宽高
style="?android:attr/progressBarStyleHorizontal" 水平进度样式
android:max="100" 最大显示进度
android:indeterminate="true" 是否精确进度/>
结合ProgressBar自带的一些get/set属性,可以轻松的在代码当中操作相应的值
这里结合之前的Button控件的Click事件实现ProgressBar的显示与隐藏, 进度的控制
public void barShowHint(View view) {
//设置控件的可见性
pbShowHint.setVisibility(pbShowHint.getVisibility() == View.GONE ? View.VISIBLE : View.GONE);
}
public void barAddProgress(View view) {
//设置控件的当前进度,当然实际使用中的情况要比这个更加复杂
int progress = pbAddProgress.getProgress();
pbAddProgress.setProgress(progress >= 100 ? 0 : progress + (int)(Math.random() * 10));
}