【安卓基础重点知识5】常见控件及属性

0 阅读8分钟

1. TextView

1.1 属性说明

//部分布局属性(继承View)
layout_width:控件宽度。
layout_height:控件高度。
android:gravity:内部对齐方式:左对齐,右对齐,居中对齐,顶部对齐,底部对齐。
//在LinearLayout里面使用
android:layout_gravity:外部对齐方式:左对齐,右对齐,居中对齐,顶部对齐,底部对齐。

//文本样式
android:lineSpacingExtra:文本行间距
android:text:设置显示的文本。
android:textSize:设置文本大小。
android:textColor:设置文本的颜色。
android:textStyle:设置文本样式,文字斜体、加粗("normal|italic|bold"),或者通过xml文件同时设置多个textView的属性,复用样式。
android:typeface:设置文本的字体,monospace:等宽字体,sans:无衬线字体,serif:衬线,normal:普通字体。
android:fontFamily:字体组合,里面有多个字体,可搭配字体权重,引用的是xml文件,例如 android:fontFamily="@font/myfont",文件新建在"res->font"中。
android:textFontWeight:设置使用的字体的权重,权重高使用谁,和android:fontFamily一起使用。
android:hint:文本在文本空时提示文本。
android:textColorHint:设置android:hint属性文本的颜色。
android:shadowColor:设置所有文本阴影的颜色,shadowColor、shadowDx、shadowDy、shadowRadius同时使用实现立体文字效果。
android:shadowDx:设置所有文本 x 轴即水平偏移,右为正,左为负,shadowColor、shadowDx、shadowDy、shadowRadius同时使用实现立体文字效果。
android:shadowDy:设置所有文本y轴即垂直偏移,下为正,上为负,shadowColor、shadowDx、shadowDy、shadowRadius同时使用实现立体文字效果。
android:shadowRadius:设置所有文本阴影的半径,shadowColor、shadowDx、shadowDy、shadowRadius同时使用实现立体文字效果,味道极佳。
android:textScaleX:设置文本的水平缩放程度,大于1,x方向拉长加粗,小于1,x方向缩短变细。
android:textColorHighlight:设置点击后文本的背景色,比如 android:autoLink="web" 为超链接的时候,点击后背景色会展示 android:textColorHighlight 设置的颜色。
android:textColorLink:设置文本是链接类型的颜色,和android:autoLink="web"联合使用。

//图片和文字共用                
android:drawableBottom:TextView底部出现一张图片,设置图片地址。
android:drawableEnd:TextView右侧出现一张图片。
android:drawableRight:TextView右侧出现一张图片。
android:drawableLeft:TextView左侧出现一张图片。
android:drawableStart:TextView左侧出现一张图片。
android:drawableTop:TextView上部出现一张图片。
android:drawablePadding:设置text与drawable(图片等)的间隔,一般都与drawableLeft、drawableStart 、drawableEnd 、drawableRight、drawableTop、drawableBottom一起使用。


//控制输入文本(EditView时弹出的软键盘也会不同)
android:inputType:设置文本的数据类型,如果包含非该类型的文本则不显示
        "none":输入普通字符
        "text":输入普通字符
        "textCapCharacters":输入普通字符
        "textCapWords":单词首字母大小
        "textCapSentences":仅第一个字母大写
        "textMultiLine":多行输入
        "textNoSuggestions":不提示
        "textUri":URI格式
        "textEmailAddress":电子邮件地址格式
        "textEmailSubject":邮件主题格式
        "textShortMessage":短消息格式
        "textLongMessage":长消息格式
        "textPersonName":人名格式
        "textPostalAddress":邮政格式
        "textPassword":密码格式
        "textVisiblePassword":密码可见格式
        "textWebEditText":作为网页表单的文本格式
        "textFilter":文本筛选格式
        "textPhonetic":拼音输入格式
        "number":数字格式(不能输入小数点)
        "numberSigned":有符号数字格式
        "numberDecimal":可以带小数点的浮点格式(可输入小数点)
        "phone":拨号键盘
        "datetime":日期+时间格式
        "date":日期键盘
        "time":时间键盘
        

//控制文本显示(EditView时控制输入)
android:lines:设置文本多少行,当长度超出该值时,超出文本部分不显示,和android:minLines属性类似。
android:maxLines:设置文本最大多少行,当文本达到改行数还没显示完,超出部分不显示,和android:lines属性类似。
android:maxLength:控制文本最多显示/输入多少个字符。
android:minLines:限制文本最低多少行显示。
android:singleLine:布尔类型,表示是否单行显示,已经废弃,建议用android:lines。
android:ellipsize:设置省略号("start":省略号显示在开头、"end":省略号显示在结尾、"middle":省略号显示在中间、"marquee" :以 “跑马灯” 的方式显示,动画横向移动),如果 TextView 的 layout_width 和 layout_height 是指定了像素的固定宽高,该属性会直接生效,如果宽高是"wrap_content"类型的,则需要同时结合"android:maxLines"和"android:maxEms"属性才可生效。
android:ems:代表的是字符M的宽度,注意不同的设备M的宽度不同,假设设置为6,则可显示文本的长度为6个M的长度。
android:maxEms:设置显示最多ems宽。
android:minEms:设置显示最小ems宽。

//其他
android:textCursorDrawable:设置光标颜色,应用在EditText输入框View中,自定义的drawable文件。
android:autoLink:指定连接形式文字,可以是("web":匹配网页模式,点击跳转浏览器应用打开网页、"all":匹配所有模式(相当于网络/电子邮件/电话/图)、"email":匹配电子邮件地址,点击后自动跳转邮箱相关的应用、"phone":匹配电子邮件地,点击后自动跳转拨号页面、"none":默认值,什么也没有)。
android:enabled:设置控件针对点击事件是否启用,每个view都有,设置为true则点击事件无响应。

2. EditText

2.1 声明方式

<EditText
    android:id="@+id/et_test"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintBottom_toBottomOf="parent"
    android:text="@string/edittext_test"/>

3. ImageView

3.1 常见属性

android:background:设置背景颜色
android:src:设置显示的Drawable对象的引用
android:padding:设置间距(图片和框的间距)
android:maxWidth:ImageView的最大宽度。
android:maxHeight:ImageView的最大高度。
android:adjustViewBounds:用于调整ImageView的边界,使得ImageView和图片有一样的长宽比例,
                          通常配合maxWidth、maxHeight一起使用
android:scaleType:设置图片的缩放类型
                center:把图片放在ImageView的中间位置,但是不进行任何缩放。
                centerCrop:保持纵横比缩放图片,以使图片能完全覆盖ImageView。
                centerInside:保持纵横比缩放图片,以使得ImageView能完全显示该图片。
                fitXY:横向、纵向独立缩放,以适应该ImageView控件。
                fitStart:保持纵横比缩放图片,并且将图片放在ImageView的左上角。
                fitCenter:保持纵横比缩放图片,缩放完成后将图片放在ImageView的中央。
                fitEnd:保持纵横比缩放图片,缩放完成后将图片放在ImageView的右下角。
                matrix:使用matrix方式进行缩放

3.2 ImageView几种图片的加载方法

  1. 在布局文件中设置属性app:src加载本地图片
<ImageView
    android:id="@+id/image_trophy"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:src="@drawable/trophy"/>
  • setImageBitmap(Bitmap):加载Bitmap

    • 在布局文件中,创建一个ImageView
    <ImageView
        android:id="@+id/image"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:padding="5dp"
        android:background="@color/red"
        app:layout_constraintTop_toBottomOf="@+id/image_trophy" />
    
    • 建立工具类
    public class DrawableUtils {
        public static void useBitmap(Context context, ImageView imageView, int drawableId){
            Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), drawableId);
            imageView.setImageBitmap(bitmap);
        }
    }
    
    • 调用加载图片
    ImageView image = findViewById(R.id.image);
    DrawableUtils.useBitmap(this, image, R.drawable.heart);
    
  • setImageResource(int resId):加载drawable文件夹中的资源文件

    ImageView image = findViewById(R.id.image);
    image.setImageResource(R.drawable.heart);
    
  • setImageURI(Uri):加载手机中的图片文件。

    ImageView image = findViewById(R.id.image);
    Uri imageUri = Uri.parse("file:///path/to/your/image.jpg"); // 注意:路径需要根据实际情况填写
    image.setImageURI(imageUri);
    
  • setImageDrawable(Drawable):加载 Drawable

    ImageView image = findViewById(R.id.image);
    Drawable drawable = getDrawable(R.drawable.heart);
    image.setImageDrawable(drawable);
    

3.3 ImageView缩放类型

ImageView的android:scaleType属性用于设置图片的缩放类型,共有如下8种缩放类型。

android:scaleType="centerInside"
图片按比例缩小或保持原来尺寸,显示在ImageView中央
fitStart 图片按比例放大或缩小到ImageView的宽度或高度,显示在ImageView的左上角,图片会完整显示。
fitEnd 图片按比例放大或缩小到ImageView的宽度或高度,显示在ImageView的右下角,图片会完整显示。
center 按照图片的原始大小显示在ImageView的中央,若图片尺寸大于ImageView宽高,则只显示部分,图片不会进行缩放
fitXY 将图片拉伸至填充整个ImageView,不按比例缩放
fitCenter
默认使用这种模式。按比例放大或缩小图片至ImageView的宽高,然后居中显示。
centerCrop 图片等比例缩放至完全填充整个ImageView,居中显示,并将放大后的多余部分裁剪掉
matrix
Matrix matrix = new Matrix();       //创建一个单位矩阵
matrix.setScale(0.1f, 0.1f); //设置缩放比例
image_scale.setImageMatrix(matrix);
经过变换的图片显示在ImageView的左上角,若缩放后的图片尺寸大于ImageView宽高,则只显示部分。该模式需要与ImageView.setImageMatrix(Matrix matrix)配合使用

注意:fitCenter和centerInside的区别

fitXX开头的都是填充视图的意思。当视图View的大小比图片小时,两者使用的效果是一样; 而当视图View的大小比图片大时,fitCenter会保持原图比例放大图片去填充View,而centerInside会保持原图大小。

4. shapeableImageView

4.1 常用类型

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!--圆角-->
    <style name="roundedCornerStyle">
        <item name="cornerFamily">rounded</item>
        <item name="cornerSize">8dp</item>
    </style>
    <!--圆形-->
    <style name="circleStyle">
        <item name="cornerFamily">rounded</item>
        <item name="cornerSize">50%</item>
    </style>
    <!--切角-->
    <style name="cutCornerStyle">
        <item name="cornerFamily">cut</item>
        <item name="cornerSize">12dp</item>
    </style>

    <!-- 菱形图片 -->
    <style name="diamondStyle">
        <item name="cornerFamily">cut</item>
        <item name="cornerSize">50%</item>
    </style>
    <!-- 右上角圆角图片 -->
    <style name="topRightCornerStyle">
        <item name="cornerFamilyTopRight">rounded</item>
        <item name="cornerSizeTopRight">50dp</item>
    </style>

    <!-- 小鸡蛋图片 -->
    <style name="eggStyle">
        <item name="cornerFamilyTopRight">rounded</item>
        <item name="cornerSizeTopRight">50dp</item>
        <item name="cornerSizeTopLeft">50dp</item>
        <item name="cornerFamilyTopLeft">rounded</item>
    </style>

    <!-- 组合弧度图片效果 -->
    <style name="comCornerStyle">
        <item name="cornerFamily">rounded</item>
        <item name="cornerSizeTopRight">50%</item>
        <item name="cornerSizeBottomLeft">50%</item>
    </style>

    <!-- 小 Tips -->
    <style name="tipsCornerStyle">
        <item name="cornerFamilyTopLeft">rounded</item>
        <item name="cornerSizeTopLeft">50%</item>
        <item name="cornerFamilyBottomLeft">rounded</item>
        <item name="cornerSizeBottomLeft">50%</item>
        <item name="cornerFamilyTopRight">cut</item>
        <item name="cornerSizeTopRight">50%</item>
        <item name="cornerFamilyBottomRight">cut</item>
        <item name="cornerSizeBottomRight">50%</item>
    </style>

    <!-- 扇形 -->
    <style name="fanStyle">
        <item name="cornerFamilyBottomLeft">rounded</item>
        <item name="cornerFamilyBottomRight">rounded</item>
        <item name="cornerFamilyTopLeft">rounded</item>
        <item name="cornerFamilyTopRight">rounded</item>
        <item name="cornerSizeBottomLeft">0dp</item>
        <item name="cornerSizeBottomRight">0dp</item>
        <item name="cornerSizeTopLeft">0%</item>
        <item name="cornerSizeTopRight">100%</item>
    </style>
</resources>

4.2 在布局文件中使用

<com.google.android.material.imageview.ShapeableImageView
    android:id="@+id/shape_image_eggStyle"
    android:layout_width="100dp"
    android:layout_height="100dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/shape_image_topRightCorner"
    android:src="@drawable/heart"
    android:scaleType="centerInside"
    android:background="@color/green"
    app:shapeAppearanceOverlay="@style/eggStyle"/>

5. Button

5.1 属性

按钮控件ButtonTextView派生而来,所以TextView拥有的属性和方法,Button均能使用。不同点如下:

TextViewButton
默认的按钮背景×
内部文本对齐方式靠左居中
textAllCaps属性(是否将英文字母转为大写)×
onClick属性(指定了点击按钮时要触发哪个方法)×

5.2 点击和长按事件监听

//点击
findViewById(R.id.btn_click).setOnClickListener(this);
//长按
findViewById(R.id.btn_long_click).setOnLongClickListener(this);

@Override
public void onClick(View view) {
    ...
}

@Override
public boolean onLongClick(View view) {
    ...
    return false;
}