Android 应用基础技术4_第1页
Android 应用基础技术4_第2页
Android 应用基础技术4_第3页
Android 应用基础技术4_第4页
Android 应用基础技术4_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章剖析Android应用程序上一章对Android应用程序的工程结构做了简单介绍,并指出AndroidManifest.xml文件是Android应用程序非常重要的配置文件。在Android应用程序运行时,Android平台将首先读取这个配置文件并进行分析,然后启动称为入口Activity的Activity运行。因此,下面就从这个配置文件开始对Android应用程序进行剖析。目录3.1AndroidManifest.xml配置文件3.2MainActivity.java3.3课堂同步练习3.4Android程序资源3.5课后同步练习3.1AndroidManifest.xml配置文件这是一个XML文件:<?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="/apk/res/android"xmlns:tools="/tools"><applicationandroid:allowBackup="true"android:dataExtractionRules="@xml/data_extraction_rules"android:fullBackupContent="@xml/backup_rules"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.Ch0201"><activityandroid:name=".MainActivity"android:exported="true"><intent-filter><actionandroid:name="ent.action.MAIN"/><categoryandroid:name="ent.category.LAUNCHER"/></intent-filter></activity></application></manifest>3.2MainActivity.java在启动Android应用程序时,Android平台将首先读取AndroidManifest.xml文件,从中获得入口Activity的相关信息,并启动入口Activity运行程序。在ch0201程序中,入口Activity是MainActivity.java程序,因此,Android平台将首先启动MainActivity程序运行,进而显示程序界面。packagecom.example.ch0201;

importandroid.os.Bundle;

importandroidx.activity.EdgeToEdge;importandroidx.appcompat.app.AppCompatActivity;importandroidx.core.graphics.Insets;importandroidx.core.view.ViewCompat;importandroidx.core.view.WindowInsetsCompat;

publicclassMainActivityextendsAppCompatActivity{

@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_main);ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main),(v,insets)->{InsetssystemBars=insets.getInsets(WindowInsetsCompat.Type.systemBars());v.setPadding(systemBars.left,systemBars.top,systemBars.right,systemBars.bottom);returninsets;});}}Android平台规定:当Android平台启动MainActivity运行时,将首先调用父类的onCreate()方法。在这个MainActivity的onCreate()方法中,有两行代码最为关键,它们是:

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);activity_main.xml文件:<?xmlversion="1.0"encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity">

<TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="HelloWorld!"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>3.3课堂同步练习请根据前面所讲述的内容试着做一道练习:将显示在屏幕上的“HelloWorld”改为“你好,世界!”。做完这个练习后,再做一道练习:在界面上显示的“你好,世界!”的下面再显示一句话“Android开发入门了!”。3.4Android程序资源Android程序资源在Android应用程序中起着十分重要的作用:Android程序资源可以是一个文件,如布局资源,也可以是一个值,如字符串常量定义。将应用程序的资源与应用程序代码分离的好处是:可以直接改变资源的值,而不用修改或编译应用程序代码本身。在Android应用程序中,会用到各种各样的资源,包括字符串资源、图片资源、界面布局资源、动画资源等,下面我们对常用的资源类型的定义和使用进行简单的介绍。3.4.1字符串资源在程序编码实践中,经常会用到大量的字符串常量。Android建议,将字符串常量统一定义到一个或多个XML资源文件中统一管理。一般情况下,将用到的字符串常量统一定义到res/values/strings.xml文件中。例如,ch0201程序工程的配置文件AndroidManefest.xml文件中,程序的标签label属性的值就是通过字符串资源定义的,AndroidManefest.xml文件部分内容如下:<?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="/apk/res/android"xmlns:tools="/tools">

<applicationandroid:allowBackup="true"android:dataExtractionRules="@xml/data_extraction_rules"android:fullBackupContent="@xml/backup_rules"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"……res/values/strings.xml文件内容;这里需要特别强调:用于定义字符串常量的XML文件必须放置到res/values工程目录下,而文件名则可以根据需要自行定义。<resources><stringname="app_name">ch0201</string></resources>AndroidStudio的构建工具会给每个资源分配一个唯一的编号,通过这个编号就可以访问到特定的资源。例如,为了在Java代码中访问在res/strings.xml文件定义的字符串资源,可以使用语句:R.string.app_name来访问由app_name定义的字符串;而在资源配置XML文件中,如AndroidManifest.xml文件中,则使用语句:@string/app_name来访问由app_name定义的字符串。3.4.2布局资源在Android程序中,可以使用Java代码直接构建程序界面,然而,更常用的方式是通过XML文件来构建布局界面。通过XML方式来构建程序界面的文件称为布局资源文件。例如,在ch0201工程中,res/layout/activity_main.xml就是一个布局资源文件。创建了这个布局资源后,可以通过程序代码将该界面显示在Activity中,就像在MainActivity.java程序中操作的那样,内容如下:publicclassMainActivityextendsAppCompatActivity{

@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_main);ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main),(v,insets)->{InsetssystemBars=insets.getInsets(WindowInsetsCompat.Type.systemBars());v.setPadding(systemBars.left,systemBars.top,systemBars.right,systemBars.bottom);returninsets;});}}3.4.3组件ID就像给每个字符串资源、布局资源定义了唯一的标识符一样,也可以给布局资源中的组件分配唯一的ID。在给布局资源中的组件分配一个唯一的ID后,就可以在程序代码中引用这些组件了。为了给布局资源中的组件分配唯一的ID,只需要在布局资源中,为需要指定ID的组件加上android:id属性即可。下面用例子说明如何为布局资源的组件分配ID。修改res/layout/activity_main.xml文件为如下代码:<?xmlversion="1.0"encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity">

<TextViewandroid:id="@+id/tv01"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="HelloWorld!"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>给TextView组件分配名为tv01的ID。现在,可以在MainActivity.java中,通过这个ID得到TextView组件的引用:packagecom.example.ch0301;

importandroid.os.Bundle;importandroid.widget.TextView;

importandroidx.activity.EdgeToEdge;importandroidx.appcompat.app.AppCompatActivity;importandroidx.core.graphics.Insets;importandroidx.core.view.ViewCompat;importandroidx.core.view.WindowInsetsCompat;

publicclassMainActivityextendsAppCompatActivity{

@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_main);ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main),(v,insets)->{InsetssystemBars=insets.getInsets(WindowInsetsCompat.Type.systemBars());v.setPadding(systemBars.left,systemBars.top,systemBars.right,systemBars.bottom);returninsets;});

TextViewtv=findViewById(R.id.tv01);tv.setText("欢迎进入Android开发者阵营!");}}在Android应用开发实践中,建议将字符串资源统一定义在res/values/string.xml文件中。修改res/values/strings.xml文件:同时修改MainActivity.java原语句:tv.setText("欢迎进入Android阵营!");为新语句:

tv.setText(R.string.group);<resources><stringname="app_name">First</string><stringname="group">欢迎进入Android开发者阵营!</string></resources>3.4.4图片资源为了实现程序的可用性和美观性,在程序中会使用图片来装饰界面。目前Android支持的图片格式,包括常见的后缀名为.jpg、.png、.bmp、.webp等格式的图片。特别强调,Android不支持.gif格式的动图图片。Android将图片也定义为资源。它将每个图片资源作为文件放置在res/mipmap(或res/drawable)工程目录下,并且可为不同的手机屏幕尺寸和分辨率使用不同的尺寸大小的图片资源。对于图片资源,为了满足不同的屏幕分辨率和屏幕大小,可以对不同的屏幕分辨率和屏幕大小创建不同的资源:对于超高分辨率的设备,则首先从res/mipmap-xhdpi目录下获得图片资源,如果没找到,则再到其他相近目录下寻找;对于高分辨率的设备,则首先从res/mipmap-hdpi目录下获得图片资源,则再到其他相近目录下寻找;以此类推。-xxhdpi、-xhdpi、-hdpi、-mdpi、-ldpi等称为资源目录后缀。序号密度后缀密度(dpi,dotperinch)对应分辨率范围1ldpi120大于等于240x320并且小于等于320x4802mdpi160大于等于320x480并且小于等于480x8003hdpi240大于等于480x800并且小于等于720x12804xhdpi320大于等于720x1280并且小于等于1080x19205xxhdpi480大于等于1080x1920并且小于等于1440x25606xxxhdpi640大于等于1440x2560并且小于等于2160x3840为了说明图片资源的使用,下面举一个显示图片资源的例子程序。首先新建一个名称为ch0302的程序工程。观察一下图片资源目录mipmap目录。图片都针对不同分辨率制作了不同尺寸的图片,因此,在程序运行时,会根据手机的屏幕分辨率大小选择使用不同目录下的图片。现在准备一张图片,然后将图片复制到mipmap选定的子目录下:鼠标右击“mipmap”,选择“paste”,在弹出的窗口中选择“…\app\src\main\res\mipmap-xxxhdpi”,也就是,将图片复制到mipmap-xxxhdpi资源目录下。然后修改布局文件“res/layout/activity_main.xml”为如下代码:<?xmlversion="1.0"encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity">

<ImageViewandroid:layout_width="match_parent"android:layout_height="300dp"android:src="@mipmap/a01"android:scaleType="fitCenter"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>3.4.5课堂同步练习编写一个Android应用程序,并显示一张自己认为漂亮的图片,然后以文本的形式介绍图片的内容。3.4.6Android的其他资源除了上面介绍的资源外,Android中还有多种其他类型的资源,包括color、animation、array、color-drawabl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论