一、简单控件

1、文本视图TextView

常用设置:

①设置文本内容:

xml中——text;代码中——setText;

②设置文本颜色:

xml中——textColor;代码中——setTextColor;

③设置文本字体大小:

xml中——textSize;代码中——setTextSize;

④设置文本风格,风格定义在res/styles.xml:

xml中——textAppearance;代码中——setTextAppearance;

⑤设置文本的对其方式:

xml中——gravity;代码中——setGravity;

跑马灯效果案例:

跑马灯用到是属性和方法说明:

①指定文本是否单行显示:

xml中——singleLine;代码中——setSingleLine;

备注:singleLine实际上已经过时了,可用android:lines="1"代替;

②指定文本超过范围后的省略方式:

取值见下表

③指定是否获取焦点。跑马灯效果要求设置为true:

xml中——focusable;代码中——setFocusable;

④指定在触摸时是否获取焦点,跑马灯效果要求设置为true:

xml中——focusableInTouchMode;代码中——setFocusableInTouchMode;

指定文本超过范围后的省略方式取值表:

①省略号在开头:

xml中——start;TruncateAt中——START;

②省略号在中间:

xml中——middle;TruncateAt中——MIDDLE;

③省略号在末尾:

xml中——end;TruncateAt中——END;

④跑马灯显示:

xml中——marquee;TruncateAt中——MARQUEE;

布局代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:gravity="center"
    tools:ignore="HardcodedText">

    <TextView
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="marquee"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:singleLine="true"
        android:text="笔者花了一整天的时间仔细研究了JDBC的使用,内容很充实,代码都经过了验证如果你能够仔细阅读完这篇文章,JDBC的相关知识我想你一定会有所掌握。在阅读的过程中,有任何不理解的地方都欢迎留言讨论。"
        android:textColor="@color/colorPrimary"
        android:textSize="25sp" />

</LinearLayout>

效果:

C002Android学习笔记-初级控件(二)_android

聊天室或文字直播间效果:

用到的属性和方法说明:

①指定文本的行数:

xml中——lines;代码中——setLines;

②指定文本的最大行数:

xml中——maxLines;代码中——setMaxLines;

③指定滚动条的方向,取值vertical或者horizontal,若不指定将不显示滚动条:

xml中——scrollbars;代码中—无—;

④设置文本的移动方式,可设置ScrollingMovementMethod,不设置则无法拉动文本:

xml中——无;代码中——setMovementMthod;

布局代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    tools:ignore="HardcodedText"
    android:gravity="center">

    <TextView
        android:id="@+id/tv_notice"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="marquee"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:singleLine="true"
        android:text="聊天室效果:点我添加聊天记录,长按我删除聊天记录"
        android:textColor="@color/colorPrimary"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:orientation="vertical">
        <TextView
            android:id="@+id/tv_chat"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="20dp"
            android:scrollbars="vertical"
            android:textColor="#000000"
            android:textSize="17sp"
            android:lines="8"
            android:maxLines="8"
            android:gravity="start|bottom"/>
    </LinearLayout>

</LinearLayout>

逻辑代码:

package com.zibo.study;

import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.text.format.DateFormat;
import android.text.format.DateUtils;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.TextView;

import java.text.SimpleDateFormat;
import java.util.Date;

public class MainActivity extends AppCompatActivity {
    //记录点击次数和原本的字符串内容
    int i=0;
    StringBuilder sb = new StringBuilder();
    @SuppressLint("SetTextI18n")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //准备一组字符串
        final String[] strings = {"hello!","嗯,这么闲啊!","不闲呀","那是想我咯?","切!"};
        //绑定控件
        TextView tv_notice = findViewById(R.id.tv_notice);
        final TextView tv_chat = findViewById(R.id.tv_chat);
        //提示文字的点击事件
        tv_notice.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //点击事件
                tv_chat.setText(sb.append(getTime()).append(strings[i%strings.length]).append("\r\n").toString());
                i++;
            }
        });
        //提示文字的长按事件
        tv_notice.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                //长按事件
                tv_chat.setText("");
                sb.delete(0,sb.length());
                return true;
            }
        });

    }
    private String getTime(){
        Date date = new Date();
        @SuppressLint("SimpleDateFormat")
        SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd :hh:mm:ss");
        return dateFormat.format(date);
    }
}

效果:

C002Android学习笔记-初级控件(二)_android_02

 

2、按钮Button

Button派生自TextView,UI上区别是Button有一个按钮外观,以提示用户点击,可以修改background属性值达到外观的目的,也可以将background属性值设置为@null,这样跟TextView就没有什么区别了;

 

3、图像视图ImageView

常用设置:

①指定图形的拉伸类型,默认是fitCenter:

xml中——scaleType;代码中——setScaleType;

属性值见下表:

C002Android学习笔记-初级控件(二)_简单控件_03

②指定图片的来源,src图形按照指定的scaleType进行拉伸,背景图不按,背景默认为fitXY;

xml中——src;代码中——setImageDrawable这是图形的Drawable对象,setImageResource设置图形的资源ID,setImageBitmap设置图形的位图对象;

Android自带的截图功能:

相关方法说明:

①setDrawingCacheEnabled:

设置绘图可用的缓存状态,true表示打开,flase表示关闭;

②isDrawingCacheEnabled:

判断该空间的绘图缓存释放可用;

③setDrawingCacheQuality:

设置绘图缓存的质量;

④getDrawingCache

获取该控件的绘图缓存结果,返回值为Bitmap类型;

⑤setDrawingCacheBackgroundColor:

设置绘图缓存的背景颜色(默认是黑色,一般设置为白色);

具体实现步骤:

①开启绘图缓存——setDrawingCacheEnabled(true);

②获取图像资源——getDrawingCache();

③将图像资源与ImageView绑定——setImageBitmap();

④延迟200毫秒关闭绘图缓存;

代码代码演示:

布局代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    tools:ignore="HardcodedText"
    android:gravity="center">

    <TextView
        android:id="@+id/tv_notice"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="marquee"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:singleLine="true"
        android:text="聊天室效果:点我添加聊天记录,长按我删除聊天记录"
        android:textColor="@color/colorPrimary"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:orientation="vertical">
        <TextView
            android:id="@+id/tv_chat"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="20dp"
            android:scrollbars="vertical"
            android:textColor="#000000"
            android:textSize="17sp"
            android:lines="8"
            android:maxLines="8"
            android:gravity="start|bottom"/>
    </LinearLayout>
    <Button
        android:id="@+id/btn_screenshot"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:text="对聊天记录截图-结果如下"/>
    <ImageView
        android:id="@+id/iv_img"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:contentDescription="@string/app_name"/>

</LinearLayout>

逻辑代码:

package com.zibo.study;

import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.text.format.DateFormat;
import android.text.format.DateUtils;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import java.text.SimpleDateFormat;
import java.util.Date;

public class MainActivity extends AppCompatActivity {
    //记录点击次数和原本的字符串内容
    int i=0;
    StringBuilder sb = new StringBuilder();
    TextView tv_chat;
    @SuppressLint("SetTextI18n")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //准备一组字符串
        final String[] strings = {"hello!","嗯,这么闲啊!","不闲呀","那是想我咯?","切!"};
        //绑定控件
        TextView tv_notice = findViewById(R.id.tv_notice);
        tv_chat = findViewById(R.id.tv_chat);
        Button btn_screenshot = findViewById(R.id.btn_screenshot);
        final ImageView iv_img = findViewById(R.id.iv_img);
        //截图-1、设置绘图缓存状态为可用
        tv_chat.setDrawingCacheEnabled(true);
        //截图-按钮点击
        btn_screenshot.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //截图
                //截图-2、获取Bitmap
                Bitmap bitmap = tv_chat.getDrawingCache();
                //截图-3、显示图片
                iv_img.setImageBitmap(bitmap);
                //延迟关闭绘图缓存,因为渲染界面需要时间,直接关闭可能会导致系统找不到位图对象
                mHandler.postDelayed(mRestCache,200);
            }
        });
        //提示文字的点击事件
        tv_notice.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //点击事件
                tv_chat.setText(sb.append(getTime()).append(strings[i%strings.length]).append("\r\n").toString());
                i++;
            }
        });
        //提示文字的长按事件
        tv_notice.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                //长按事件
                tv_chat.setText("");
                sb.delete(0,sb.length());
                return true;
            }
        });

    }
    //延迟关闭绘图缓存
    private Handler mHandler = new Handler();
    private Runnable mRestCache = new Runnable() {
        @Override
        public void run() {
            tv_chat.setDrawingCacheEnabled(false);
            //关闭再打开的目的是为下次截图作准备
            tv_chat.setDrawingCacheEnabled(true);
        }
    };
    //获取当前系统时间
    private String getTime(){
        Date date = new Date();
        @SuppressLint("SimpleDateFormat")
        SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd :hh:mm:ss");
        return dateFormat.format(date);
    }
}

效果:

C002Android学习笔记-初级控件(二)_xml_04

 

4、图像按钮ImageButton

ImageButton派生自ImageView,本质上就是一个带了按钮外观的图片;

Button可以设置文字按钮,ImageButton可以设置图片按钮,那么图片加文字按钮呢?

通过TextView实现图片加文字按钮:

XML中的基本设置:

drawabeTop、drawabeBottom、drawabeLeft、drawabeRight:分别指定文本上下左右的图形;

drawablePadding:指定图形与文本的间距;

代码中的基本设置:

setCompoundDrawables:设置文本周围的图形;

setCompoundDrawablePadding:设置图形与文本的间距;