安卓开发日记2
本篇内容:
资源的管理与使用
认识VIew控件并使用
文章目录
前言
一、资源管理与使用
1.图片资源与图标资源
| 图片资源 | 图标资源 |
|---|---|
| 图片资源是指界面中的图片资源,即APP内的图片。 | 图标是指APP在安卓机界面上的图标。 |
| 图片资源的位置放在drawable的文件中 | 图标资源放在mipmap的文件夹中 |

这两种资源都可以通过java和XML布局两种方式调用。
2.布局资源layout
res/layout中的.xml文件,通常为页面布局。
通常有两种设置布局资源文件的方式:
1.用java代码调用文件
setContentView(R.layout.activity_main);

2.在XML布局文件中通过标签调用其他布局资源
<include layout="@layout/menu"/>
创建新的layout布局资源,在activity_main布局中引用
menu.xml:

activity_main:

3.主题及样式资源(themes.xml)
res/values/themes.xml

4.颜色资源color.xml
res/values/color.xml

5.字符串资源string.xml
res/values/string.xml

除了layou资源是使用setContentIView设置页面,themes通过setTheme(R.style.AppTheme)来设置主题,其余资源均通过
getResources().get资源文件夹名(对应name属性名) 获取。
例如:
getResources.getDrawable(R.mipmap.ic_launcher) 调用mipmap中的图标资源
getResources.getDrawable(R.drawable.图片名) 调用drawable中的图片资源
getResources.getColosr(R.color.colorPrimary) 调用Color文件中的colorPrimary颜色
getResources/getString(R.string.app_name); 调用String文件中的app_name字符串
二、View控件以及其属性
View控件是安卓UI的基本构建单元。为用户提供可视化界面,实现与用户的交互。
一个View控件一般为“< 控件 ></控件>”格式,其中部分View控件可以嵌套其他控件。
每个控件都有属性可以进行设置。
我们先对其常用的属性进行理解,熟悉,便于控件的使用。
View控件常用属性:
android:id
正如其名该属性是view控件的唯一标识符。
android:name
该属性主要是在value/文件夹下的color,string,themes等静态资源中出现。

id和name的区别可以理解为,一个学校里的学生的id号和名字,学校里学生的名字可能会重复但是学生证上的id不会重复,是该学生在该学校的唯一证明。name在具体的项目中表现为比如某些相同的重复的属性会用静态资源来存储,例如color,string等xml文件中。而普通view中没有name属性,只有id属性。例如下面这副图左边19行和25行都将TextView中的文本设为了相同的红色(color.xml中的holo_red_light颜色),他们的id必须是不同的。

android:layout_width
该view控件的宽度。该属性主要理解wrap_content和match_parent。wrap_content的作用是跟随其内部的内容大小改变宽度,而match_parent会根据该控件的父控件的宽度设置自己的宽度。
android:layout_height
该view控件的高度。该控件与layout_width一样有wrap_content和match_parent。
android:background
该view控件的背景设置。
android:layout_margin
该view控件的外边距,即与其他控件的距离。
android:padding
该view控件的内边距,view边界框与内容的距离。
android:gravity
该view控件中的内容在该view控件框中的显示位置,居中,底部和顶部等位置,bottom,center,top…
View控件:
常用控件:
1.TextView用于文本显示
android:text 设置文本内容
android:background 设置文本背景
android:textColor 设置文本文字颜色
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="你好"
android:textColor="@color/purple_200"
android:textSize="20sp"
/>

2.Button用于按钮
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="请点击我"
android:textColor="@color/black"
android:textSize="25sp"
/>

3.Edittext用于编辑的文本显示
android:hint 控件中内容为空时提示的文本信息
android:textColorHint 控件为空的文本信息文字颜色
android:inputtype 控件中输入的文本形式
android:minLines 设置文本的最小行数
android:editable 设置是否可编辑
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="请输入文本"
android:textColor="@color/purple_200"
android:inputType="text"
/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="请输入文本"
android:textColor="@color/purple_200"
android:inputType="number"
/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="请输入文本"
android:textColor="@color/purple_200"
android:inputType="textPassword"
/>

4.ImageView显示图片
android:src 设置控件需要显示的图片资源
android:scaleType 将图片资源缩放或移动适应控件宽高
android:tint 将托片渲染成指定颜色
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/purple_200"
android:src="@drawable/start2" />

5.RadioButton单选按钮
单选框的实现需要在RadioGroup中才能实现单选功能,如果没有RadioGroup两个选项都可以随意的点击,且不能取消点击项。
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="男"
/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="女"
/>
</RadioGroup>

6.CheckBox复选框
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="水果"
/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="零食"
/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="饮料"
/>

7.ListView列表控件
android:listSelector 条目点击后改变的背景颜色
android:divider 设置分割线的颜色
android:dividerHeight 设置分割线的高度
android:scrollbars 设置是否滚动条
android:fadingEdge 去掉上边和下边的黑色阴影
列表控件往往和数据适配器一起使用。
数据适配器:
BaseAdapter
public int getCount() 获取Item条目的总数
public Object getItem(int position) 根据position获取某个Item的位置
public long getItemId(int position) 根据position获取某个Item的ID
public View getView(int position,View convertView,ViewGroup parent) 获取position对应的Item视图
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="45dp"
android:text="购物商城"
android:textSize="18sp"
android:textColor="#FFFFFF"
android:background="#FF8F03"
android:gravity="center"/>
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
list_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">
<ImageView
android:id="@+id/iv"
android:layout_width="120dp"
android:layout_height="90dp"
android:layout_centerVertical="true"/>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@+id/iv"
android:layout_centerVertical="true">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="桌子"
android:textSize="20sp"
android:textColor="#000000"/>
<TextView
android:id="@+id/tv_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="价格:"
android:textSize="20sp"
android:layout_marginTop="10dp"
android:layout_below="@+id/title"
android:textColor="#FF8F03"/>
<TextView
android:id="@+id/price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1000"
android:textSize="20sp"
android:layout_below="@+id/title"
android:layout_toRightOf="@id/tv_price"
android:textColor="@color/black"
android:layout_marginTop="10dp"/>
</RelativeLayout>
</RelativeLayout>
MainActivity.java
package com.example.first_demo;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private ListView mListView; //创建ListView的
private String[] titles={"桌子","苹果","蛋糕","线衣","猕猴桃","围巾"};
private String[] prices={"1800元","10元/kg","300元","350元","10元/kg","280元"};//创建商品名称和价格数据集合
private int[] icons={R.drawable.table,R.drawable.apple,R.drawable.cake,R.drawable.wireclothes,R.drawable.kiwifruit,R.drawable.scarf};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView=findViewById(R.id.lv);//将xml中的id为lv的ListView控件赋值给mListView
MyBaseAdapter mAdapter=new MyBaseAdapter();//调用类方法创建一个继承数据适配器的实例
mListView.setAdapter(mAdapter);//使用ListView的setAdapter将数据适配器中的内容传给XML文件
}
class MyBaseAdapter extends BaseAdapter{ //创建一个类继承BaseAdapter,重写四个方法
@Override
public int getCount(){
return titles.length;
}
@Override
public Object getItem(int position){
return titles[position];
}
@Override
public long getItemId(int position){
return position;
}
@Override
public View getView(int position, View converView, ViewGroup parent){
View view=View.inflate(MainActivity.this,R.layout.list_item,null);
//先创建三个View变量,并将XML文件中对应的对象赋值
TextView title=view.findViewById(R.id.title); //设置View变量为XML文件中id为title的对象
TextView price =view.findViewById(R.id.price); //设置View变量为XML文件中id为price的对象
ImageView iv=view.findViewById(R.id.iv); //设置View变量为XML文件中id为iv的对象
//使用View的set方法将创建的数组变量经过position索引赋值
title.setText(titles[position]);
price.setText(prices[position]);
iv.setBackgroundResource(icons[position]);
return view;//将view变量返回
}
}
}
1. inflate 方法的作用
功能:将 XML 布局文件(如 R.layout.list_item)解析并实例化为内存中的 View 对象。XML 中定义的 UI 组件(如 TextView、ImageView)会被转换为可操作的 Java 对象。
用途:常用于动态创建界面元素(例如列表项、对话框内容或动态添加的视图)。
2. 参数解析
MainActivity.this:提供 Context,用于访问应用资源(如布局文件)。
R.layout.list_item:指定要加载的布局资源 ID。
null:表示不立即将生成的 View 附加到父容器。此时,布局参数(LayoutParams)可能需要手动设置。
3. 为何第三个参数是 null?
不立即附加到父容器:生成的 View 暂时独立存在,后续可通过 parentView.addView(view) 手动添加到父容器。
布局参数处理:若父容器已知(如 ListView),建议改用 LayoutInflater.inflate() 并传入父容器和 attachToRoot=false,以自动适配父容器的布局参数:
LayoutInflater.from(context).inflate(R.layout.list_item, parent, false);

布局控件:
1.LinearLayout
线性布局,以行列的形式管理控件
android:orientation="horizontal\vertical" 该属性定义了线性布局内的子控件是如何排布的
horizontal(水平排布):

vertical(垂直排布):

2.RelativeLayout
相对布局,属性以父控件或者是其他控件的位置而定。
android:layout_centerParent 父布局正中央
android:layout_centerVertical 父布局垂直中央
android:centerHorizontal 父布局水平中央
android:layout_alignParentTop 控件与父控件顶部对齐
android:layout_alignParentLeft 控件与父控件左侧对齐
android:layout_alignParentRight 控件与父控件右侧对齐
android:layout_alignParentBottom 控件与父控件底部对齐
android:above 位于某控件上方
android:below 位于某控件下方
android:layout_toLeftOf 位于某控件左侧
android:layout_toRightOf 位于某控件右侧
android:layout_alignTop 控件与某控件的顶部对齐
android:layout_alignBottom 控件与某控件的底部对齐
android:alignLeft 控件与某控件的左侧对齐
android:alignRight 控件与某控件的右侧对齐
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 按钮B位于按钮A右侧,并与按钮A顶部对齐 -->
<Button
android:id="@+id/buttonA"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Button A" />
<Button
android:id="@+id/buttonB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@id/buttonA"
android:layout_toRightOf="@id/buttonA"
android:text="Button B" />
<!-- 文本视图位于父容器底部 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Bottom Text"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"/>
</RelativeLayout>

3.TableLayout
表格布局,将页面作为一张表格,定义位置。
adnroid:stretchColumns 设置可拉伸的列
android:shrinkColumns 设置可收缩的列
android:collapseColumns 设置可隐藏的列
android:layout_column 控件显示的位置
android:layout_span 控件占据的列数
<?xml version="1.0" encoding="utf-8"?>
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:stretchColumns="1"
android:padding="16dp">
<!-- 第二列拉伸填充 -->
<!-- 第一行:标题 -->
<TableRow
android:layout_marginBottom="8dp">
<TextView
android:text="姓名"
android:textStyle="bold"
android:padding="4dp"/>
<TextView
android:text="年龄"
android:textStyle="bold"
android:padding="4dp"/>
<TextView
android:text="职业"
android:textStyle="bold"
android:padding="4dp"/>
</TableRow>
<!-- 第二行:数据 -->
<TableRow>
<TextView
android:text="张三"
android:padding="4dp"/>
<TextView
android:text="28"
android:padding="4dp"/>
<TextView
android:text="工程师"
android:padding="4dp"/>
</TableRow>
<!-- 第三行:跨列示例 -->
<TableRow>
<TextView
android:text="备注:"
android:layout_column="0"
android:padding="4dp"/>
<TextView
android:text="暂无特殊说明"
android:layout_span="2"
android:padding="4dp"/>
<!-- 跨两列 -->
</TableRow>
</TableLayout>

4.FrameLayout
帧布局
android:foreground 设置前景图像
android:foregroundGravity 前景显示位置
<?xml version="1.0" encoding="utf-8"?>
<!-- 层叠图片和文字 -->
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="200dp"
android:layout_height="200dp"
android:foreground="图片资源"
android:foregroundGravity="bottom">
<!-- 覆盖在前景的角标 -->
<!-- 图片(底层) -->
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="图片资源"
android:scaleType="centerCrop"/>
<!-- 文字(覆盖在图片上方) -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New"
android:textColor="#FFF"
android:textSize="18sp"
android:layout_gravity="top"
android:padding="8dp"/>
<!-- 左上角对齐 -->
</FrameLayout>


浙公网安备 33010602011771号