Android 简单控件
Android 简单控件
文本控件
1.文本定义
不推荐在XML 文件中直接写字符串,应该使用来自@string的字符串,将字符串定义在专用的位置下:
// res/values/strings.xml
<resources>
<string name="app_name">app name</string>
<string name="hello">你好,世界</string>
</resources>
2.文本的大小
常见的字号单位主要有px、dp、sp
px px是手机屏幕的最小显示单位,像素密度越高,以px计量的分辨率就越大
dp 有时也写作dip,与设备无关的显示单位,只与屏幕的尺寸有关,同样尺寸的屏幕以dp计量的分辨率是相同的
sp 原理和dp 类似,但它专用来设置字体的大小,也是官方推荐的字号单位,设置普通字体,dp与sp 无任何差别,设置大字体,sp将会比dp 大,dp没有任何变化
3.文本颜色
文本颜色或者背景分别引用于@color @drable,均在res/路径下定义
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#6200EE</color>
<color name="colorPrimaryDark">#3700B3</color>
<color name="colorAccent">#03DAC5</color>
</resources>
xml无法直接引用color类的颜色常量,所以在android中有一套规范的编码标准,色值由透明度和RGB三原色联合定义 该标准又分为6位十六进制和8位16进制两种表达方式 在8位16进制中:FFEEDDCC FF 代表透明度,表示完全不透明,如果是00就代表全透明,EE表示红色,DD 表示绿色的浓度,CC表示蓝色的浓度 在6位16进制中:0x00ff00 它在XML文件中默认不透明,在代码中默认透明
视图基础
视图属性
分为宽高,对应属性的是layout_width layout_height 1.match_parent 表示与上级视图保持一致 2.wrap_parent 表示与内容自适应 3.以dp为单位的具体尺寸 在代码中修改宽高属性:
// 获取名叫tv_code的文本视图
TextView tv_code = findViewById(R.id.tv_code);
// 获取tv_code的布局参数(含宽度和高度)
ViewGroup.LayoutParams params = tv_code.getLayoutParams();
// 修改布局参数中的宽度数值,注意默认px单位,需要把dp数值转成px数值
params.width = Utils.dip2px(this, 300);
tv_code.setLayoutParams(params); // 设置tv_code的布局参数
//Utils.java
// 根据手机的分辨率从 dp 的单位 转成为 px(像素)
public static int dip2px(Context context, float dpValue) {
// 获取当前手机的像素密度(1个dp对应几个px)
float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f); // 四舍五入取整
}
// 根据手机的分辨率从 px(像素) 的单位 转成为 dp
public static int px2dip(Context context, float pxValue) {
// 获取当前手机的像素密度(1个dp对应几个px)
float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f); // 四舍五入取整
}
视图中的间距
与web 前端一样,有外边距,也有内边距,layout_margin,layout_padding,上下左右也可以单独设置
视图的对齐方式
layout_gravity 可以指定当前视图相对于上级视图的对齐方向,下面举个例子
layout_gravity ="top|left" // 左上
gravity 是指定内部内容的组件也就是下级视图的对齐方向,用法一样
线性布局 & 相对布局
LinearLayout 线性布局顾名思义,按照线性的分布进行布局,比较重要的属性有:
orientation="horizontal" // 指定下级布局的排列方向为横排,也可以设置为竖排
layout_weight="1" // 权重,指定当前布局在上级布局中所占比的权重,按照这个权重值进行划分在布局中的位置
RelativeLayout 相对布局顾名思义,好比物理当中学的参考对象,我们站在本地不动,把地球作为参考对象,我们是处于不动的状态,把月球作为参考对象,实际上我们还是在动的
被包含在相对布局的第一级组件,有一系列的相对上级布局的属性,上下左右,居中、居顶部、居底部等均拥有,英文意思非常好理解,直译即可
在垂直中间
android:layout_centerVertical="true"
跟上级左边对齐
android:layout_alignParentLeft="true"
···还有很多,就不举列子了
网格布局 & 滚动视图
GridLayout 网格布局,就是跟网格一样
android:columnCount="2" // 几列
android:rowCount="2" // 几行
滚动视图:
//ScrollView 垂直方向滚动
android:layout_width="match_parent"
android:layout_height="wrap_content"
//HorizontalScrollView 水平方向滚动
android:layout_width="wrap_content"
android:layout_height="200dp"
按钮触控
Button
可以设置指定位置的图片:
android:drawableLeft="@drawable/ic_about"
android:drawableRight="@drawable/ic_about"
android:drawableTop="@drawable/ic_about"
android:drawableBottom="@drawable/ic_about"
基本属性
设置是否把字符转换成大写
android:textAllCaps="false"
设置按钮是否能被点击
android:enabled="false"
// 从布局文件中获取名叫btn_click_single的按钮控件
Button btn_click_single = findViewById(R.id.btn_click_single);
// 设置点击监听器,一旦用户点击按钮,就触发监听器的onClick方法
// 实现 View.OnClickListener 接口
btn_click_single.setOnClickListener(new MyOnClickListener());
// 设置长按监听器,一旦用户长按按钮,就触发监听器的onLongClick方法
// 实现 View.OnLongClickListener 接口
btn_longclick_single.setOnLongClickListener(new MyOnLongClickListener());
图像视图 & 图像按钮
ImageView 可以使用以下两种方式去设置图片的资源,scaleType 属性,当图片资源与空间大小不符合的时候,默认采取的缩放方式
缩放类型 | 效果 |
---|---|
CENTER | 保持原始的尺寸,并在视图居中 |
FIT_CENTER | 保持宽高比例,缩放图片使其位于视图中间 |
CENTER_CROP | 缩放图片使其充满视图,并位于视图中间 |
CENTER_INSIDE | 保持宽高比例,缩小图片使之位于视图中间(只缩小不放大) |
FIT_XY | 缩放图片使其正好填满视图(图片可能被缩放变形) |
FIT_START | 保持宽高比例,缩放图片使其位于视图上方或左侧 |
FIT_END | 保持宽高比例,缩放图片使其位于视图下方或右侧 |
iv_scale.setImageResource(R.drawable.apple);
// 设置缩放的方式
iv_scale.setScaleType(ImageView.ScaleType.CENTER);
android:src="@drawable/apple"
// 设置缩放的方式
android:scaleType="center"
ImageButton
ImageButton 继承至ImageView,所以拥有所有ImageView 的方法与参数 它也拥有button的点击事件和长按事件,它们之间也包含一些差异:
- Button 既可以显示图片(通过setBackgroundResource), 也可以显示文字,ImageButton 只能显示图片
- ImageButton 图片可以按照比例缩放,Button通过设置背景的图像会拉伸变形
- ImageButton 有前景图和背景图,Button 只有背景图