Sability安卓(三)_基础开发知识扫盲,开学XML......

一、页面和布局

页面:一个APP通常由多个页面组成,如:登录页面、注册页面、首页、个人中心、商品详情页、购物车等等

在传统Android开发中,一个页面通常由两部分组成:

  • 逻辑代码,即页面的逻辑功能,数据,交互等,一般使用Java代码或者kotlin代码

  • 布局代码,通常使用xml布局

逻辑代码:

Kotlin 复制代码
class MainActivity : AppCompatActivity() {
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_main)
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }
    }
}

布局代码:

XML 复制代码
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

页面Activity

代码解读:

Kotlin 复制代码
class MainActivity : AppCompatActivity() {
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}

基类:AppCompatActivity

我们编写的页面需要继承AppCompatActivityAppCompatActivity是Google提供的一个父类

  • 对 Material Design 设计规范的支持

  • 向后兼容旧版 Android 系统

  • 集成 ActionBar(应用栏)

生命周期方法onCreate()

  • onCreate() 是 Activity 生命周期的第一个生命周期回调方法

  • 当 Activity 第一次被创建时调用

  • 必须调用 super.onCreate(savedInstanceState) 来执行父类初始化

加载布局:setContentView()

  • 设置当前 Activity 的可视化布局

  • R.layout.activity_main 表示

    • R 是自动生成的资源类

    • layout 表示布局资源目录

    • activity_main 是具体的布局文件名(位于 res/layout 目录)

文件对应关系:

自学探索:

  1. activity_main.xml 中添加基本 UI 组件

  2. 学习如何在 Activity 中通过 findViewById() 获取视图控件

  3. 了解页面(Activity)的其他生命周期方法,尝试重写其他生命周期方法(如 onResume()

  4. 创建第二个 Activity 并学习跳转方法

二、XML布局

2.1.基本概念

  • 文件类型.xml 文件(用 XML 语言描述界面)

  • 存放位置项目根目录 → res/layout/ 文件夹

2.2.三种预览模式

  1. Design模式:可视化界面设计,适合快速查看布局效果,支持拖放控件和实时预览。但可能不适合复杂布局或需要精确调整的情况。

  2. Split模式:左右分屏,左边是代码,右边是设计视图。适合同时查看设计和代码,方便学习和调试。

  3. Code模式:直接编辑XML代码,适合有经验开发者需要精确控制布局或处理复杂结构的情况。

2.3.标签

标签分类:

  • 单标签(自闭合标签)

  • 双标签

2.3.1.单标签(自闭合标签)

<标签名 /> 格式表示,没有子节点且自动闭合,常见于简单控件或声明性元素。

适用于纯展示型控件(如 TextViewButton

XML 复制代码
<!-- 自闭合标签 -->
<TextView 
    android:id="@+id/textView" 
    android:text="Hello World!" />

<!-- 另一种写法(等价) -->
<TextView android:id="@+id/textView" android:text="Hello World!"/>
2.3.2.双标签

<标签名> ... </标签名> 格式表示,有子节点或复杂结构 ,常见于容器布局(如 LinearLayoutRelativeLayout

特点

  • 必须成对出现(开始标签和结束标签)

  • 可以嵌套子标签

  • 适用于需要组合多个控件的布局

XML 复制代码
<!-- 双标签(容器布局) -->
<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"
    android:orientation="vertical">

    <!-- 子标签:TextView 和 Button -->
    <TextView 
        android:text="第一行" />
    
    <Button 
        android:text="点击我" />

</LinearLayout>

实战小技巧:

  • 代码格式化,按 Ctrl + Alt + L(Windows/Linux)或 Cmd + Option + L(Mac)自动格式化 XML

  • > 和 / 分别可以快速设置单标签和双标签,详情见视频演示

  • 书写标签的时候一定要先写<,才会出现代码提示

三、AndroidManifest.xml

3.1.什么是AndroidManifest.xml

  • 作用:清单文件,向 Android 系统声明应用的「身份信息」和「组件清单」

  • 关键功能

    • 声明应用包含哪些组件(Activity/Service/Receiver/Provider)

    • 申请运行所需权限(如网络访问、相机使用)

    • 指定应用的图标、名称、版本号

3.2.核心配置

3.2.1.<application> 标签
  • android:icon:应用图标(放在 res/mipmap 目录)

  • android:label:应用名称(需在 strings.xml 中定义)

  • android:theme:主题样式(如 @style/AppTheme

3.2.2.<activity> 标签
  • android:name:指定 Activity 类名(需包含包名,如 .MainActivity
  • android:screenOrientation:屏幕方向(portrait/landscape
  • android:launchMode:启动模式(singleTop/standard
3.2.3.Intent Filter(意图过滤器)
  • 作用:告诉系统哪些 Intent 可以触发当前 Activity

  • 常见配置:

    • <action>:指定 Intent 的动作(如 MAIN 表示主入口)

    • <category>:指定 Intent 的类别(如 LAUNCHER 表示启动器)

3.2.4.权限申明

XML 复制代码
<uses-permission android:name="android.permission.INTERNET" /> <!-- 网络权限 -->
<uses-permission android:name="android.permission.CAMERA" /> <!-- 相机权限 -->

注意事项:

  • 危险权限(如位置、通讯录)需在 AndroidManifest 中声明,并在运行时动态申请(Android 6.0+)

  • 使用 PermissionX 等第三方库简化权限处理

四、实战:修改应用图标和名称

修改名称

  1. 打开项目:启动Android Studio,打开你正在开发的项目。

  2. 找到 strings.xml文件 :在项目的 res/values 目录下,你会看到一个名为 strings.xml 的文件。这个文件中存储了应用中使用的各种字符串资源,包括应用名称。

  3. 修改应用名称 :打开 strings.xml 文件,在其中找到 <string name="app_name">你的应用名称</string> 这一行代码。将 "你的应用名称" 替换为你想要的新名称,比如 <string name="app_name">我的新应用</string>

  4. 保存修改 :保存 strings.xml 文件后,你会发现应用名称在模拟器或者真机上的显示已经更新啦。

XML 复制代码
android:label="@string/app_name"


<resources>
    <string name="app_name">待办助手</string>
</resources>

修改应用图标

使用Image Asset工具,设计应用图标

设计图标

五、R类

5.1.R类是什么?

R 是 Android 自动生成的 静态资源类,相当于一个「资源字典」,用来快速查找应用中的各种资源(布局、图片、字符串等)

5.2.生成规则

  • 每当你添加/修改资源文件(如 activity_main.xmlstrings.xmldrawable/ic_launcher.png)时,Android Studio 会自动扫描并更新 R 类。

  • 如果资源文件命名不规范或路径错误,R 类可能无法生成,导致编译失败。

5.3.常见R类资源

|-------|------------|----------------------------------------------------|
| 资源类型​ | ​对应 R 类成员​ | ​示例代码​ |
| 布局文件 | R.layout | setContentView(R.layout.activity_main) |
| 字符串 | R.string | textView.setText(R.string.app_name) |
| 图片/图标 | R.drawable | imageView.setImageResource(R.drawable.ic_launcher) |
| 颜色值 | R.color | textView.setTextColor(R.color.red) |

5.4.总结:

  • R 类是 Android 开发的「资源管家」,使用它能大大提高开发效率。

  • 牢记两点

    • 资源文件命名和路径必须严格遵循规范。

    • 修改资源后一定要清理项目重新编译。


六、创建新的Activity

选中项目包名下的文件夹,右键,新建activity,模板可以选择Empty Views Activity,输入Activity的名称

如何指定App启动的第一个activity?两种方式

  • 方式一:通过配置intent-filter指定(常规方式)

  • 方式二:通过配置launch options + exported=true (零时指定某个页面作为启动页),方式二这种方式只能通过编译运行启动指定页面,在模拟器或者真机的桌面,点击应用图标,仍然还是用的方式一

相关推荐
indexsunny2 小时前
互联网大厂Java求职面试实战:从Spring Boot到Kafka的技术问答解析
java·spring boot·spring cloud·kafka·flyway·hikaricp·microservices
juniperhan2 小时前
Flink 系列第9篇:Flink 重启策略详解
java·大数据·数据仓库·flink
星晨雪海2 小时前
优惠券秒杀的核心业务逻辑
java·前端·数据库
阿飞不想努力2 小时前
文件上传原理与实操
java·spring boot·vue·文件上传
Cx330❀2 小时前
线程进阶实战:资源划分与线程控制核心指南
java·大数据·linux·运维·服务器·开发语言·搜索引擎
人道领域2 小时前
【黑马点评日记02】:Session+ThreadLocal实现短信登录
java·开发语言·spring·tomcat·intellij-idea
Bat U2 小时前
JavaEE|计算机是如何工作的
java·人工智能
三少爷的鞋2 小时前
Android 慢性病之拒绝"带病"上线:为什么 ANR 是必须根除的代码 HP?
android
许彰午2 小时前
# 政务表单动态建表?运行时DDL引擎,前端拖完字段后端直接建
java·前端·后端·架构·政务