安卓开发日记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>

在这里插入图片描述

posted @ 2025-05-24 10:33  Y0417  阅读(4)  评论(0)    收藏  举报  来源