
设置文本内容有两种方式:
在 XML 文件中通过属性 android:text 设置文本
在 Java 代码中调用文本视图对象的 setText 方法设置文本
//根据项目工程文件会自动生成R这一个类,这个类可能包含文字还有图片
setContentView(R.layout.activity_text_view);
TextView tv_hello=findViewById(R.id.tv_hello);
tv_hello.setText("你好,世界!");
也可以在value中的String.xml中设置字体,之后再在xml和java代码中引用。
你好,世界!
在XML文件中引用(@string/***)
在Java代码中引用(R.string.***)
//根据项目工程文件会自动生成R这一个类,这个类可能包含文字还有图片 setContentView(R.layout.activity_text_view); TextView tv_hello=findViewById(R.id.tv_hello); tv_hello.setText(R.string.hello);2.设置文本的大小
XML中要求在字号数字后面写明单位类型,常见的字号单位主要有px,dp,sp三种。
1.px:指像素,是指基本原色素及其灰度的基本编码。
px是手机屏幕的最小显示单位,它与设备的显示屏有关。
2.dp:安卓开发时的长度单位。
dp有时也写作dip,指的是与设备无关的显示单位,它只与屏幕的尺寸有关。
对于尺寸相同的手机,即使分辨率不同,同dp的组件占用屏幕比例也相同。dp的UI效果只在相同尺寸的屏幕上相同,如果屏幕尺寸差异过大,那么需要重做DP适配,这也就是为什么平板需要单独做适配的原因。
3.sp:与缩放无关的抽象像素,是字体单位。一般情况下可认为sp=dp。
它专门 用来设置字体大小。手机在系统设置里可以调整字体的大小(小、标准、大、超大)。
补充:
| 名称 | 解释 |
|---|---|
| px(Pixel像素) | 也称为图像元素,是作为图像构成的基本单元,单个像素的大小并不固定,跟随屏幕大小和像素数量的关系变化,一个像素点为1px。 |
| Resolution(分辨率) | 是指屏幕的垂直和水平方向的像素数量,如果分辨率是 1920*1080 ,那就是垂直方向有 1920 个像素,水平方向有 1080 个像素。 |
| Dpi(像素密度) | 是指屏幕上每英寸(1英寸 = 2.54 厘米)距离中有多少个像素点。/td> |
| Density(密度) | 是指屏幕上每平方英寸(2.54 ^ 2 平方厘米)中含有的像素点数量。/td> |
| Dip / dp (设备独立像素) | 也可以叫做dp,长度单位,同一个单位在不同的设备上有不同的显示效果,具体效果根据设备的密度有关,详细的公式请看下面 。 |
像素之间的转换:
在java里调用setTextColor方法可以设置文本颜色,color类中的颜色如下:
| 颜色类型 | 说明 |
|---|---|
| BLACK | 黑色 |
| DKGRAY | 深灰 |
| GRAY | 灰色 |
| LTGRAY | 浅灰 |
| WHITE | 白色 |
| RED | 红色 |
| GREEN | 绿色 |
| BLUE | 蓝色 |
| YELLOW | 黄色 |
| CYAN | 青色 |
| MAGENTA | 玫瑰红 |
| TRANSPARENT | 透明 |
在XML文件中则通过属性android:textColor指定文本颜色
RGB三原色(红色red、绿色green、蓝色blue)
RGB色值有按八位十六进制数编码和六位十六进制数编码方式。
在八位编码中,头两位表示透明度,接下来为红色浓度,再就是绿色浓度,最后是蓝色浓度。
比如:00123456
00两位表示透明度
12两位为红色浓度
34两位为绿色浓度
56两位为蓝色浓度
全0颜色就越淡,全1颜色就越深,也就是说当首两位为FF时,表示不透明,为00则为透明,其余的类似。
注意:不透明才能看得见颜色,设置为透明,即使其他位上有颜色也显示不出来。
在java中通过setTextColor方法设置6位(即不设置头两位),是默认透明的。
在xml文件中不设置头两位,是默认不透明的。
具体在java代码和xml中引用与上面设置字的大小类似
在XML文件中引用(@color/xxx)。
在Java代码中引用(R.color.xxx)。
背景色设置也类似。
android:layout_width:宽度 android:layout_height:高度
宽高的取值主要有下列三种:
match_parent:表示与上级视图保持一致,继承父类的值。
wrap_content:表示与内容自适应。
以dp为单位的具体尺寸。
最后效果:
有两种方式,分别是使用layout_margin属性和使用padding属性,
设置视图的对齐方式。
layout_margin:指定了当前视图与周围平级视图之间的距离。也就是外间距,具体包含上下左右。
padding:指定了当前视图与内部下级视图之间的距离。也就是内间距,也包含上下左右。
3.设置视图的对齐方式
对齐方式也有两种途径,使用layout_gravity属性和使用gravity属性。
layout_gravity:指定了当前视图相对于父类视图的对齐方式。
gravity:指定了子类视图相对于当前视图的对齐方式。
三、常用布局 1.线性布局LinearLayout
线性布局内部有两种排列方式,分别为水平和垂直。在orientation标签有两种数学分别是horizontal和vertical。标签内如果不指定排列方式的话,默认排列方式为vertical。
horizontal:内部视图在水平方向从左往右排列。
vertical:内部视图在垂直方向从上往下排列。
线性布局的权重layout_weight,不在LinearLayout节点设置,而在线性布局的直接下级视图设置,表示该下级视图占据的宽高比例。
layout_width标签属性填0,表示水平方向的宽度比例。
layout_height标签属性填0,表示垂直方向的宽度比例。
标签layout_weight填=数字,表示在同一视图下所占的比例。
2.相对布局RelativeLayout
相对布局的下级视图位置由其他视图决定。定位参照物有两种:
同级视图
父级视图(也就是它归属的RelativeLayout)。如果不设置参照物,那么下级视图默认显示在RelativeLayout内的左上角。
相对布局的取值如下:
| 相对位置的属性取值 | 说明 |
|---|---|
| layout_toLeftOf | 当前视图在指定视图的左边 |
| layout_toRightOf | 当前视图在指定视图的右边 |
| layout_above | 当前视图在指定视图的上方 |
| layout_below | 当前视图在指定视图的下方 |
| layout_alignLeft | 当前视图与指定视图的左侧对齐 |
| layout_alignRight | 当前视图与指定视图的右侧对齐 |
| layout_alignTop | 当前视图与指定视图的顶部对齐 |
| layout_alignBottom | 当前视图与指定视图的底部对齐 |
| layout_centerInParent | 当前视图在上级视图中间 |
| layout_centerHorizontal | 当前视图在上级视图的水平方向居中 |
| layout_centerVertical | 当前视图在上级视图的垂直方向居中 |
| layout_alignParentLeft | 当前视图与上级视图的左侧对齐 |
| layout_alignParentRight | 当前视图与上级视图的右侧对齐 |
| layout_alignParentTop | 当前视图与上级视图的顶部对齐 |
| layout_alignParentBottom | 当前视图与上级视图的底部对齐 |
3.网格布局GridLayout
顾名思义,网格布局支持多行多列的表格排列,默认从左往右、从上到下排列,它有两个属性,分别是行和列:
columnCount:指定了网格的列数,即每行能放多少个视图;
rowCount:指定了网格的行数,即每列能放多少个视图;
4.滚动视图ScrollView
滚动视图也有两个属性,分别是水平和垂直的滚动视图,ScrollView和HorizontalScrollView。
| 采用的视图 | layout_width属性 | layout_height属性 |
|---|---|---|
| ScrollView | match_parent | wrap_content |
| HorizontalScrollView | wrap_content | match_parent |
四、按钮触控 1.按钮控件Button
Button由TextView派生而来,Button与TextView区别如下:
| 区别 | Button | TextView |
|---|---|---|
| 默认背景 | 按钮背景 | 无背景 |
| 内部文本默认对齐方式 | 居中对齐 | 左对齐 |
| 默认是否将英文转大写 | 是 | 否 |
并且Button在TextView的基础上新增了两个属性:
textAllCaps:是否将英文字母转为大写(默认为TRUE)
onClick:接管用户的点击动作,指定了点击按钮时要触发哪个方法
public class DateUtil {
public static String getNowTime(){
SimpleDateFormat sdf=new SimpleDateFormat("HH:mm:ss");
return sdf.format(new Date());
}
}
public void doClick(View view){
String desc=String.format("%s 您点击了按钮: %s", DateUtil.getNowTime(),((Button)view).getText());
tv_result.setText(desc);
}
运行结果:
监听器,专门监听控件的动作行为。只有控件发生了指定的动作,监听器才会触发开关去执行对应的代码逻辑。所以Button中有两种常用的监听器,分别是点击监听器和长按监听器。
点击监听器:通过setOnClickListener方法设置。按钮被按住少于500毫秒时触发点击事件。
public class ButtonClickActivity extends AppCompatActivity implements View.OnClickListener{
private TextView tv_result1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_button_click);
tv_result1 =findViewById(R.id.tv_result1);
Button btn_click_single =findViewById(R.id.btn_click_single);
btn_click_single.setOnClickListener(new MyOnClickListener(tv_result1)) ;
Button btn_click_public =findViewById(R.id.btn_click_public);
btn_click_public.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v.getId()==R.id.btn_click_public){
String desc=String.format("%s 您点击了按钮: %s", DateUtil.getNowTime(),((Button)v).getText());
tv_result1.setText(desc);
}
}
//写成静态内部类可以防止内存泄露
static class MyOnClickListener implements View.OnClickListener {
private final TextView tv_result1;
public MyOnClickListener(TextView tv_result1) {
this.tv_result1=tv_result1;
}
@Override
public void onClick(View view) {
String desc=String.format("%s 您点击了按钮: %s", DateUtil.getNowTime(),((Button)view).getText());
tv_result1.setText(desc);
}
}
}
对应的xml文件配置:
运行结果:
长按监听器:通过setOnLongClickListener方法设置。按钮被按住超过500毫秒时触发长按事件。
public class ButtonLongActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_button_long);
Button btn_long_click = findViewById(R.id.btn_long_click);
TextView tv_result0= findViewById(R.id.tv_result0);
//通过匿名内部类的方式
btn_long_click.setOnLongClickListener(v -> {
String desc=String.format("%s 您点击了按钮: %s", DateUtil.getNowTime(),((Button)v).getText());
tv_result0.setText(desc);
return false;
});
}
}
对应的xml配置文件:
运行结果:
在实际业务开发中,按钮通常拥有两种状态,即不可用状态与可用状态,它们在外观和功能上的区别如下:
| 区别 | 可用按钮 | 不可用按钮 |
|---|---|---|
| 是否允许点击 | 是 | 否 |
| 按钮文字颜色 | 黑色 | 灰色 |
是否允许点击由enabled属性控制,true—>允许,false—>不允许
public class ButtonEnableActivity extends AppCompatActivity implements View.OnClickListener{
private Button btn_test;
private TextView tv_res;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_button_enable);
Button btn_enable = findViewById(R.id.btn_enable);
Button btn_disable = findViewById(R.id.btn_disable);
btn_test = findViewById(R.id.btn_test);
tv_res = findViewById(R.id.tv_res);
btn_enable.setOnClickListener(this);
btn_disable.setOnClickListener(this);
btn_test.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_enable:
//启用当前控件
btn_test.setEnabled(true);
//设置按钮的文字颜色
btn_test.setTextColor(Color.BLACK);
break;
case R.id.btn_disable:able:
//禁用当前控件
btn_test.setEnabled(false);
//设置按钮的文字颜色
btn_test.setTextColor(Color.GRAY);
break;
case R.id.btn_test:
String desc=String.format("%s 您点击了按钮: %s", DateUtil.getNowTime(),((Button)v).getText());
tv_res.setText(desc);
break;
}
}
}
xml配置文件如下:
运行结果:
图像视图展示的图片通常位于res/drawable目录,显示图片目前有两种方式:通过xml配置或者通过java中setImageResource方法设置。
ImageView中scaleType属性取值类型如下:
| XML中的缩放类型 | ScaleType类中的缩放类型 | 说明 |
|---|---|---|
| fitXY | FIT_XY | 拉伸图片使其正好填满视图(图片可能被拉伸变形) |
| fitStart | FIT_START | 保持宽高比例,拉伸图片使其位于视图上方或左侧 |
| fitCenter | FIT_CENTER | 保持宽高比例,拉伸图片使其位于视图中间 |
| fitEnd | FIT_END | 保持宽高比例,拉伸图片使其位于视图下方或右侧 |
| center | CENTER | 保持图片原尺寸,并使其位于视图中间 |
| centerCrop | CENTER_CROP | 拉伸图片使其充满视图,并位于视图中间 |
| centerInside | CENTER_INSIDE | 保持宽高比例,缩小图片使之位于视图中间(只缩小不放大) |
默认采用fitCenter
fitCenter和center以及centerInside看起来相似,但是这三个有很大的区别,区别如下:
| 属性名 | 区别 |
|---|---|
| fitCenter | 既允许缩小图片、也允许放大图片(可大可小) |
| centerInside | 只允许缩小图片、不允许放大图片(可小不可大) |
| center | 自始至终保持原始尺寸(不可大也不可小) |
所以,当显示图片尺寸大于视图宽高,centerInside与fitCenter都会缩小图片,此时它们显示效果相同;当图片尺寸小于视图宽高,centerInside与center都保持图片大小不变,此时它俩的显示效果相同。
实现效果:
顾名思义,ImageButton是带有图片的图像按钮,ImageButton继承ImageView而不是Button,它跟Button之前的区别如下:
| 区别 | ImageButton | Button |
|---|---|---|
| 显示图片与文本 | 只可图像 | 都可 |
| 图像缩放形式 | 可按比例缩放 | 通过背景设置的图像会拉伸变形。 |
| 背景和前景是否可以添加图片 | 可 | 不可 |
ImageButton解决有些字符打不出来,可以用图像替换的问题,比如开平方的符号等。
ImageButton和ImageView的区别如下:
| 区别 | ImageButton | ImageView |
|---|---|---|
| 是否有默认背景 | 是 | 否 |
| 默认缩放类型 | center | fitCenter |
3.同时展示文本与图像实现方法大致分为两种:
第一种在LinearLayout布局中对ImageView和TextView组合布局。
第二种通过按钮控件Button的drawable属性设置文本周围的图标。
Button的drawable属性如下表所示:
| 属性名 | 说明 |
|---|---|
| drawableTop | 指定文字上方的图片 |
| drawableBottom | 指定文字下方的图片 |
| drawableLeft | 指定文字左边的图片 |
| drawableRight | 指定文字右边的图片 |
| drawablePadding | 指定图片与文字的间距 |
xml配置文件:
显示效果:
参考视频资料:哔哩哔哩动脑学院安卓从入门到项目实战