App阶段性学习成果

绪论

引言

随着移动互联网技术的迅猛发展,智能手机已成为人们日常生活中不可或缺的一部分。其中,Android操作系统以其开源性、灵活性以及广泛的用户基础,在全球智能手机市场中占据了举足轻重的地位。作为移动应用开发的重要平台,Android为开发者提供了丰富的API和工具,使得开发者能够轻松地构建出各种功能强大、用户体验优良的移动应用。

本人有幸参加了App程序开发的相关课程,对目前的课程学习有了一些感悟,故有了这份报告,下面本人将对android开发中各种布局的特点、适用场景以及如何在实际项目中应用这些布局进行论述。包括线性布局、约束布局、表格布局、帧布局、相对布局。同时,总结在课程中学习到的UI界面交互功能的实现方法。包括但不限于按钮点击事件、列表项点击事件、滑动操作、菜单项和对话框等。

项目的目的与意义

Android平台之所以受到广大开发者的青睐,主要得益于其以下几个方面的优势:

  1. 掌握Android应用的基本开发流程,包括需求分析、设计、编码、测试等阶段。
  2. 熟悉Android应用的界面设计原则和方法,提高应用的用户体验。
  3. 掌握Android应用的数据存储和网络通信技术,实现应用的复杂功能。
  4. 锻炼阶段性学习成果的总结,提高软件开发能力。

Android平台的优势

Android平台之所以受到广大开发者的青睐,主要得益于其以下几个方面的优势:

  1. 开源性:Android操作系统基于Linux内核,采用开源模式进行开发,这意味着开发者可以自由地获取并修改其源代码,以满足特定的开发需求。
  2. 广泛的设备兼容性:由于Android系统的开放性,使得它能够支持众多不同品牌、不同配置的移动设备,这为开发者提供了广阔的市场空间。
  3. 丰富的API和工具:Android平台提供了大量的API和工具,包括用户界面设计、数据存储、网络通信、多媒体播放等方面的功能,这些API和工具极大地简化了开发过程,提高了开发效率。
  4. 强大的社区支持:Android拥有庞大的开发者社区,社区成员之间互相交流、分享经验,为开发者提供了宝贵的学习资源和技术支持。

一:布局类型

1.1线性布局

特点

线性布局以其简单性、灵活性和易用性而广受欢迎,是构建安卓用户界面时常用的布局方式之一。

  1. 简单与易用性:线性布局是一种简单且易于使用的布局方式,它允许开发者按照水平(horizontal)或垂直(vertical)方向排列视图组件(子视图)。
  2. 视图组件的排列与大小调整:子视图按照添加顺序依次排列,不会重叠。开发者可以灵活地调整视图组件的位置和大小,例如通过设置layout_weight属性来控制视图组件在布局中的占比,实现子视图的均分或不均分。
  3. 权重属性(Weight Attribute):线性布局支持权重属性,允许开发者指定某个视图组件在布局中占据更多的空间。权重属性基于0到无穷大的整数,用于在水平或垂直方向上分配额外的空间。
  4. 嵌套布局:线性布局支持嵌套,即在一个线性布局中可以包含另一个或多个线性布局,这种嵌套的方式使得开发者能够构建更为复杂的界面布局。
  5. 对齐方式控制:通过设置gravity属性,开发者可以控制视图组件在布局中的对齐方式,如顶部对齐、底部对齐、居中对齐等。
  6. 内边距与外边距:线性布局支持设置padding和margin属性,用于调整视图组件与布局边界之间的间距,以及视图组件之间的间距。
  7. 继承关系:LinearLayout是ViewGroup的子类,这意味着它可以作为容器来包含其他视图组件。此外,某些特定的视图组件(如单选按钮组RadioGroup)也是线性布局的子类。
  8. 常用属性:除了上述提到的属性外,线性布局还具有其他常用属性,如orientation、layout_gravity等。

适用环境

线性布局(LinearLayout)在多种环境下都具有良好的适用性。无论是基本布局需求、权重分配、嵌套布局、兼容性、资源优化还是可维护性方面,线性布局都能提供有效的解决方案。

  1. 基本布局需求:线性布局适用于大部分基本的界面布局需求。无论是水平排列还是垂直排列,它都能以简单直接的方式组织视图组件。
  2. 简单易用性:对于初学者和快速原型开发,线性布局提供了直观易懂的布局方式。开发者只需设置布局方向和组件顺序,即可快速构建界面。
  3. 权重分配:在需要实现不同视图组件在布局中占据不同比例的场景中,线性布局的layout_weight属性非常有用。通过调整权重,可以精确地控制组件的大小比例。
  4. 嵌套布局:当需要实现更为复杂的界面布局时,可以通过嵌套线性布局来实现。这种灵活性使得开发者能够构建出具有层次感和复杂结构的界面。
  5. 兼容性:线性布局在Android系统上广泛使用,因此具有良好的兼容性。它可以在不同的设备和Android版本上正常显示,无需过多的适配工作。
  6. 资源优化:相比其他复杂的布局方式,线性布局相对轻量级,可以节省CPU和内存资源。在移动设备上,这种资源优化尤为重要,可以提高应用的性能和响应速度。
  7. 可维护性:线性布局的代码结构清晰,易于理解和维护。当需要修改界面布局时,开发者可以轻松地调整组件的位置、大小和属性。
  8. 特定场景下的适用性:在某些特定场景下,如列表项、表单元素等,线性布局尤其适用。它可以轻松地实现这些元素的水平或垂直排列,并保持良好的界面一致性。

代码示范

<?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="wrap_content"

        android:layout_height="wrap_content"

        android:text="大家好"/>

    <Button

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="按钮1" />

    <Button

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="按钮2" />

</LinearLayout>

效果展示

1.2约束布局

特点

约束布局以其灵活性、相对定位、强大的约束条件、减少布局嵌套、屏幕适配支持、链式布局以及辅助工具支持等特点,在安卓开发中成为一种广泛使用的布局管理器。

  1. 灵活性:约束布局可以在水平和垂直方向上灵活地设置元素的位置和大小,这使得界面布局能够根据不同屏幕尺寸和方向的变化进行适配。通过设置控件之间的约束关系,开发者可以精确地控制元素之间的相对位置和大小,实现灵活的界面布局。
  2. 相对定位:约束布局使用约束关系来定义元素之间的位置关系,这种相对定位的方式使得布局更加直观和易于理解。元素可以相对于父容器或其他元素进行定位,从而创建出复杂且有序的界面布局。
  3. 强大的约束条件:约束布局提供了多种约束条件,如左对齐、右对齐、居中、上对齐、下对齐等,这些条件可以根据需求灵活地设置元素的位置。开发者可以通过组合使用这些约束条件,实现复杂的布局效果和动画效果。
  4. 减少布局嵌套:约束布局通过相对定位和约束关系来定义元素的位置和大小,从而避免了嵌套多层布局的需要。这不仅可以提高布局的性能和绘制效率,还可以简化布局结构,使代码更加清晰易读。
  5. 屏幕适配:约束布局能够更好地解决屏幕适配问题,因为它可以按照比例约束空间位置和尺寸,以适应不同屏幕尺寸和分辨率的设备。这使得开发者可以创建出在各种设备上都能良好运行的界面布局。
  6. 支持链式布局:约束布局支持链式布局(Chains),可以轻松地创建水平或垂直方向上的控件链。这种链式布局可以帮助开发者更好地组织和管理界面元素,提高布局的灵活性和可维护性。
  7. 辅助工具支持:安卓开发工具(如Android Studio)提供了丰富的辅助工具来支持约束布局的使用,如Optimizer、Barrier、Group、Placeholder和Guideline等。这些工具可以帮助开发者更高效地创建和管理约束布局,提高开发效率和质量。

适用环境

约束布局适用于需要解决布局嵌套过多问题、提高性能和绘制效率、支持屏幕适配、支持多种布局场景以及支持可视化操作的Android应用开发环境。

  1. API级别要求:约束布局可以在API级别9(Android 2.3,Gingerbread)及以上的Android系统中使用。这意味着大部分现代Android设备都支持约束布局。
  2. 解决布局嵌套过多问题:约束布局主要用于解决在开发复杂布局时出现的布局嵌套过多问题。传统的布局方式(如LinearLayout和RelativeLayout)经常需要多层嵌套来实现复杂的界面效果,而约束布局通过约束规则来指定各个控件的位置和关系,从而减少了布局的嵌套层级。
  3. 提高性能和绘制效率:由于减少了布局的嵌套层级,约束布局可以显著提高设备的绘制性能和效率。在绘制视图时,嵌套的层级越少,设备所需的计算功耗也就越少,从而提高了应用的响应速度和流畅性。
  4. 支持屏幕适配:约束布局可以按照比例约束空间位置和尺寸,因此能够更好地适应不同屏幕尺寸和分辨率的设备。这使得开发者可以创建出在各种设备上都能良好运行的界面布局。
  5. 支持多种布局场景:约束布局支持多种布局场景,如固定比例视图、N等分布局、百分比对齐、角度布局、超长限制强制约束、多组件协同约束以及容器约束下的边界约束等。这些场景可以满足不同应用的界面设计需求。
  6. 可视化操作支持:在Android Studio中,约束布局支持可视化操作。开发者可以直接在布局编辑器中通过拖放控件来创建和编辑约束布局,而无需编写繁琐的XML代码。这大大提高了开发效率和便捷性。
  7. 与其他布局方式的比较:与传统的LinearLayout和RelativeLayout相比,约束布局更加灵活且易于管理。它拥有更多的属性和约束规则,使得开发者可以更加精确地控制界面元素的位置和大小。同时,约束布局也可以在Android Studio中进行可视化操作,进一步提高了开发效率。

代码示范

<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    xmlns:tools="http://schemas.android.com/tools"

    android:orientation="vertical"

    tools:context=".MainActivity">

    <Button

        android:id="@+id/button1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="约束按钮1"

        app:layout_constraintBottom_toBottomOf="parent"

        app:layout_constraintEnd_toEndOf="parent"

        app:layout_constraintStart_toStartOf="parent"

        app:layout_constraintTop_toTopOf="parent"

        tools:ignore="HardcodedText"/>

    <Button

        android:id="@+id/button2"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="约束按钮2"

        app:layout_constraintBottom_toBottomOf="@+id/button1"

        app:layout_constraintEnd_toStartOf="@+id/button1"

        tools:ignore="HardcodedText"/>

</androidx.constraintlayout.widget.ConstraintLayout>

效果展示

1.3表格布局

特点

表格布局适用于需要多行多列布局的场景,可以通过TableRow和子视图来创建复杂的表格结构。然而,由于其固定的行列结构和可能的性能问题,表格布局在复杂布局中的使用需要谨慎考虑。

  1. 布局结构:表格布局允许开发者将子视图按照行列的方式排列,类似于表格中的单元格。每个TableLayout由多个TableRow组成,每个TableRow表示一行,而这一行可以由多个子元素(视图)组成。
  2. 行列控制:每向TableLayout中添加一个TableRow就代表一行。每向TableRow中添加一个子视图就表示一列。可以通过设置android:layout_columnWeight属性来控制TableLayout中每一列的宽度相对于其他列的比例。
  3. 单元格特性:表格布局中的每个单元格可以包含一个或多个子视图。单元格中的子视图可以按照指定的方式(如居中、居左、居右等)进行排列。单元格可以为空,但不能跨列,即不能有相邻的单元格为空。
  4. 间距和边框:可以通过设置属性来控制单元格之间的间距和边框。间距和边框的设置可以增加表格布局的可读性和美观性。
  5. 继承关系:TableLayout继承自LinearLayout,但本质上仍然是线性布局管理器的一种特殊形式。这意味着TableLayout具有一些LinearLayout的特性,如水平和垂直方向的布局管理等。
  6. 使用注意事项:表格布局在处理复杂布局时可能不够灵活,因为它需要明确指定行和列的数量。如果需要更灵活的布局方式,可能需要考虑使用其他布局类型,如约束布局(ConstraintLayout)或相对布局(RelativeLayout)。

适用场景

  1. 多行多列布局需求:当界面设计需要呈现多行多列的数据时,表格布局是理想的选择。例如,需要展示一个表格形式的联系人列表、成绩表或简单的数据表单时,使用TableLayout可以方便地组织和管理这些数据。
  2. 固定布局结构:表格布局适用于那些具有固定行数和列数的布局场景。由于TableLayout需要明确指定行和列的数量,因此它适用于那些布局结构相对固定、不需要频繁变化的情况。
  3. 简单布局需求:对于一些简单的布局需求,使用表格布局可以快速地实现。通过将子视图添加到TableRow中,并将TableRow添加到TableLayout中,可以轻松创建出基本的表格结构。这种简单的布局方式适用于快速原型设计和简单的界面展示。
  4. 性能考虑:在使用表格布局时,需要注意性能问题。由于表格布局需要处理多个行和列,因此在处理大量数据时可能会消耗较多的内存和计算资源。因此,在需要展示大量数据的场景下,需要仔细评估表格布局的性能表现,并考虑是否使用其他更高效的布局方式。
  5. 与其他布局方式的结合:虽然表格布局在某些场景下非常有用,但在其他场景下可能需要与其他布局方式结合使用。例如,可以使用LinearLayout或RelativeLayout来包裹TableLayout,以实现更复杂的界面布局。此外,也可以将TableLayout与其他视图组件(如TextView、ImageView等)结合使用,以创建更丰富的界面效果。
  6. 使用场景示例:在实际开发中,表格布局常用于一些简单的数据展示场景。例如,在一个简单的计算器应用中,可以使用表格布局来组织数字和运算符按钮;在一个简单的表格编辑器中,可以使用表格布局来展示和编辑表格数据。此外,在一些需要展示多行多列数据的列表中(如联系人列表、订单列表等),也可以使用表格布局来实现。

代码示范

<?xml version="1.0" encoding="utf-8"?>

<TableLayout 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:layout_width="match_parent"

    android:layout_height="match_parent"

    android:stretchColumns="1"

    tools:context=".MainActivity">

    <TableRow>

        <Button android:text="@string/_1"/>

        <Button android:text="2" android:layout_column="2"/>

    </TableRow>

    <TableRow>

        <Button android:text="4"/>

        <Button android:text="5"/>

        <Button android:text="6"/>

    </TableRow>

    <TableRow>

        <Button android:text="7"/>

        <Button android:text="8" android:layout_span="2"/>

    </TableRow>

</TableLayout>

效果展示

1.4帧布局

特点

帧布局是一种简单易用的安卓布局方式,适用于需要将多个视图叠加在一起的场景。然而,由于其限制较大和缺乏对齐、间距控制等功能,因此在实际开发中需要根据具体需求进行选择和使用。

  1. 层叠式布局:帧布局是一种层叠式的布局方式,允许开发者将多个视图(或称为控件)叠加在一起。后添加的控件会层叠在先添加的控件上,形成类似于堆栈的效果。
  2. 无位置控制:帧布局不会对子视图进行任何对齐或间距控制。所有子视图都会被推到最前面,并且会覆盖其他视图。子视图之间的相对位置完全由它们被添加到帧布局中的顺序决定。
  3. 简单易用:帧布局的使用相对简单,开发者只需将子视图添加到帧布局中即可。无需进行复杂的布局参数设置,适合快速搭建简单的界面布局。
  4. 适用场景:帧布局适用于需要将多个视图叠加在一起的场景,例如对话框、浮动的菜单或提示框等。在这些场景中,帧布局可以方便地管理多个视图之间的层次关系和覆盖效果。
  5. 基本属性:帧布局支持一些基本的布局属性,如layout_width、layout_height、background等。这些属性可以帮助开发者调整帧布局的尺寸、背景等外观效果。
  6. 性能考虑:由于帧布局不会进行复杂的布局计算和排列,因此在某些情况下可能具有较高的性能优势。然而,在需要处理大量子视图或复杂布局的场景中,帧布局可能不是最佳选择。
  7. 限制和缺点:帧布局的限制较大,广泛适用性不强。对于需要精确控制子视图位置和大小的场景,可能需要考虑使用其他布局方式。此外,由于帧布局不会对子视图进行对齐或间距控制,因此可能会出现布局混乱或重叠的情况。

适用场景

帧布局在某些场景下很有用,但它并不适用于所有情况。对于需要精确控制子视图位置和大小的复杂布局,需要考虑使用其他布局方式,如线性布局、相对布局或约束布局等。在选择合适的布局方式时,应根据具体需求和界面设计来进行权衡和选择。

  1. 浮动窗口和对话框:当需要创建一个浮动在界面上方的窗口,如对话框、提示框或弹出菜单时,帧布局是一个很好的选择。你可以将需要显示的内容(如文本、按钮等)作为子视图添加到帧布局中,并通过调整帧布局的透明度和背景等属性来实现所需的外观效果。
  2. 简单的堆叠布局:如果你需要将多个视图简单地堆叠在一起,而不需要复杂的布局对齐和间距控制,那么帧布局是一个快速且简单的解决方案。例如,在需要创建一个包含多个图像或图标的叠加效果时,可以使用帧布局将它们堆叠在一起。
  3. 视频和相机预览界面:在开发视频播放器或相机应用时,帧布局常常用于承载视频预览或相机预览的视图。由于帧布局允许子视图堆叠,你可以将视频预览视图与其他控件(如播放/暂停按钮、音量控制条等)叠加在一起,形成一个完整的播放器界面。
  4. 动画和过渡效果:帧布局也常用于实现动画和过渡效果。通过将多个视图叠加在一起,并在运行时动态更改它们的可见性和属性,你可以创建出各种复杂的动画和过渡效果。帧布局的这种灵活性使得它在实现自定义动画和过渡效果时非常有用。
  5. 简单的布局容器:在某些情况下,你可能需要一个简单的布局容器来包裹其他视图或布局。帧布局可以作为这样的容器使用,它不会对其子视图进行任何特殊的布局处理,而是简单地将它们堆叠在一起。这使得帧布局成为了一个很好的占位符或临时容器,可以在需要时方便地添加或移除子视图。

代码示范

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout 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:layout_width="match_parent"

    android:layout_height="match_parent"

    android:foreground="@drawable/ic_launcher_background"

    android:foregroundGravity="right|bottom"

    tools:context=".MainActivity">

    <LinearLayout

        android:layout_width="match_parent"

        android:layout_height="600dp"

        android:background="#0000cc">

    </LinearLayout>

    <LinearLayout

        android:layout_width="300dp"

        android:layout_height="400dp"

        android:background="#cc00cc">

    </LinearLayout>

    <LinearLayout

        android:layout_width="200dp"

        android:layout_height="100dp"

        android:background="#330000">

    </LinearLayout>

</FrameLayout>

效果展示

1.5相对布局

特点

相对布局在安卓开发中以其相对定位、多种定位属性、支持嵌套、高灵活性、强适应性、多样布局方式、层叠效果、隐藏和显示控制等特点,成为了一种非常实用的布局方式。

  1. 相对定位:相对布局允许子视图相对于父视图或其他子视图进行定位。这意味着子视图的位置是根据它与父视图或其他子视图的相对位置来确定的。
  2. 多种定位属性:相对布局提供了多种属性来控制子视图的位置,如layout_above、layout_below、layout_toLeftOf、layout_toRightOf等,用于指定子视图与其他视图的相对位置关系。同时,也有属性如layout_alignParentTop、layout_alignParentBottom、layout_alignParentLeft等,可以将子视图与父视图的边缘对齐。
  3. 支持嵌套:相对布局支持子视图的嵌套,即一个子视图本身也可以是一个相对布局,包含其他子视图。这种嵌套关系可以实现更复杂的布局效果。
  4. 灵活性高:相对布局允许开发者根据需要在不同位置进行调整,因此具有很高的灵活性。它可以根据屏幕尺寸和方向的变化进行自适应调整,适用于不同设备和屏幕尺寸的应用开发。
  5. 适应性强:相对布局可以根据子视图之间的相对关系进行自动调整,这使得它在不同屏幕尺寸和方向下都能保持良好的布局效果。因此,相对布局在适配不同设备和屏幕尺寸方面具有很强的适应性。
  6. 布局方式多样:通过相对布局的属性设置,可以实现多种布局方式,如水平排列、垂直排列、居中布局等。这使得开发者可以根据具体需求选择适合的布局方式。
  7. 层叠效果:相对布局支持子视图的层叠效果,即一个子视图可以覆盖在另一个子视图之上。通过合理设置属性,可以实现子视图的层叠布局效果。
  8. 隐藏和显示控制:相对布局提供了对子视图的隐藏和显示控制功能。通过设置android:visibility属性,可以控制子视图的可见性,从而实现动态布局的效果。
  9. 权重控制:虽然相对布局本身并不直接支持权重(layout_weight)属性,但可以在其内部嵌套其他支持权重的布局(如线性布局),以实现更复杂的权重控制效果。

适用场景

相对布局在安卓开发中适用于需要精确控制视图位置、适应不同屏幕尺寸和方向、实现复杂布局、需要重叠视图、动态调整布局以及简化布局层次等场景。通过合理使用相对布局的各种属性和特点,可以创建出灵活、高效且适应性强的用户界面。

  1. 需要精确控制视图位置:当需要精确控制子视图相对于其他视图或父视图的位置时,相对布局是一个很好的选择。通过使用各种相对定位属性,如layout_toLeftOf、layout_below等,可以确保视图按照指定的位置进行排列。
  2. 适应不同屏幕尺寸和方向:相对布局可以自动调整子视图的位置和大小,以适应不同屏幕尺寸和方向。这使得相对布局在开发跨平台或适配多种设备的应用时非常有用。
  3. 实现复杂布局:对于包含多个视图且需要精确控制它们之间相对位置的复杂布局,相对布局能够胜任。通过将视图按照相对位置进行排列,可以实现复杂的界面设计。
  4. 需要重叠视图:相对布局支持视图的重叠效果。通过将视图放置在相同的位置,可以实现一个视图覆盖在另一个视图之上的效果,这在创建动画、弹出菜单或特殊界面效果时非常有用。
  5. 动态调整布局:在需要动态调整布局的场景中,相对布局也很适用。由于它是基于相对位置进行布局的,因此可以轻松地通过修改属性或添加/删除视图来动态地改变布局。
  6. 简化布局层次:在某些情况下,使用相对布局可以简化布局层次结构。通过将多个视图直接放置在相对布局中,可以减少嵌套布局的数量,从而提高布局的性能和可维护性。
  7. 与其他布局方式结合使用:虽然相对布局在某些方面非常强大,但在某些特定场景下,与其他布局方式(如线性布局、表格布局等)结合使用可能更为合适。例如,可以在相对布局中嵌套线性布局来实现水平或垂直排列的视图组。

代码示范

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:id="@+id/RelativeLayout1"

    android:layout_width="match_parent"

    android:layout_height="match_parent" >

   

    <ImageView

        android:id="@+id/img1"

        android:layout_width="200dp"

        android:layout_height="300dp"

        android:layout_centerInParent="true"

        android:src="@drawable/img" />

   

    <ImageView

        android:id="@+id/img2"

        android:layout_width="150dp"

        android:layout_height="150dp"

        android:layout_toLeftOf="@id/img1"

        android:layout_centerVertical="true"

        android:src="@drawable/img_3"/>

   

    <ImageView

        android:id="@+id/img3"

        android:layout_width="150dp"

        android:layout_height="150dp"

        android:layout_toRightOf="@id/img1"

        android:layout_centerVertical="true"

        android:src="@drawable/img_3"/>

   

    <ImageView

        android:id="@+id/img4"

        android:layout_width="200dp"

        android:layout_height="200dp"

        android:layout_above="@id/img1"

        android:layout_centerHorizontal="true"

        android:src="@drawable/img_3"/>

   

    <ImageView

        android:id="@+id/img5"

        android:layout_width="200dp"

        android:layout_height="200dp"

        android:layout_below="@id/img1"

        android:layout_centerHorizontal="true"

        android:src="@drawable/img_3"/>

</RelativeLayout>

效果展示

二:UI界面交互功能

2.1按钮点击事件

功能实现设想

首先本人会在layout文件里面放置一个Button控件,让它水平和垂直都居中,Button里面的文字也居中对齐,内容为“快点本人吧,本人是按钮”,接下来实现按钮点击事件:只要本人们点击按钮,就会弹出Toast提示信息,内容为“本人是按钮,本人被点击了”。本人在这里用的是匿名内部类实现,在onCreate()方法里面声明并绑定控件,然后注册监听器,重写onClick()方法,只要在onClick()方法中加入待处理的逻辑就行。

实际案例的代码及效果

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout 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:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context="MainActivity">

    <Button

        android:id="@+id/button"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_centerVertical="true"

        android:layout_centerHorizontal="true"

        android:gravity="center"

        android:text="快点本人吧,本人是按钮"

        android:textSize="25sp" />

</RelativeLayout>

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        Button button=findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                Toast.makeText(MainActivity.this,"本人是按钮,本人被点击了",Toast.LENGTH_SHORT).show();

            }

        });

    }

}

案例反思

  1. 代码的可读性和可维护性

反思:有时,为了快速实现功能,本人可能会将大量的逻辑代码直接写在onClick方法中,这会导致代码难以阅读和维护。

改进措施:将点击事件中的逻辑代码提取到单独的方法中,并为这些方法添加有意义的注释。这样可以使代码更清晰,也更容易进行单元测试。

  1. 处理异步操作

反思:在处理按钮点击事件时,有时需要执行异步操作(如网络请求)。如果直接在onClick方法中执行这些操作,可能会导致主线程阻塞,从而影响用户体验。

改进措施:使用异步任务来处理耗时操作,并确保在异步任务完成后正确地更新UI。

  1. 用户体验

反思:按钮点击事件不仅涉及技术实现,还与用户体验密切相关。例如,点击按钮后的反馈可以增强用户体验。

改进措施:考虑在点击按钮时添加适当的反馈效果,以提供更好的用户体验。同时,确保按钮的点击区域足够大且易于触摸,以降低误触率。

  1. 监听器设置的时机

反思:最初,本人可能会在onCreate方法中立即为按钮设置监听器。虽然这通常是正确的做法,但如果在后续代码中(如onResume或onStart)对按钮进行了某些更改(如改变可见性),可能需要重新考虑监听器的设置。

改进措施:确保在需要的时候设置监听器,并考虑在适当的时候(如按钮变为可见时)移除或重新设置监听器。

2.2列表项点击事件

功能实现设想

在简单开发课程列表中,课程每一项被点击,都会有窗口弹出,要实现 ListView 的点击事件,首先要为 ListView 设置适配器,然后设置列表项的点击事件监听器,在 onItemClick 方法中,根据具体的需求编写处理点击事件的逻辑。通过 position参数获取点击的列表项位置,在需要的情况下,还可以通过 parent.getItemAtPosition(position) 获取点击的列表项对应的数据对象。

实际案例的代码及效果

<?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">

    <ListView

        android:id="@+id/list_item"

        android:layout_width="wrap_content"

        android:layout_height="match_parent"

        />

</RelativeLayout>

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;

import android.os.Bundle;

import android.view.View;

import android.widget.AdapterView;

import android.widget.ArrayAdapter;

import android.widget.Button;

import android.widget.ListView;

import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private String[] data = {"mathematics数学","biology生物","physics物理","chemistry化学","computer science计算机科学"};

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,data);

        ListView listView = (ListView) findViewById(R.id.list_item);

        listView.setAdapter(adapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override

            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

                Toast.makeText((Context) MainActivity.this, (String) listView.getItemAtPosition(i),Toast.LENGTH_LONG).show();

            }

        });

    }

}

案例反思

  1. 可重用性和可测试性

反思:如果列表项点击事件的逻辑与特定的Activity或Fragment紧密耦合,那么这些代码将难以重用和测试。

改进措施:将点击事件的逻辑抽象到可重用的组件或工具类中。在不同的Activity和Fragment中重用这些逻辑,并且更容易为它们编写单元测试。

  1. 分离关注点

反思:有时,列表项的渲染逻辑、点击事件处理和数据逻辑混合在适配器(Adapter)中,这会导致代码难以理解和维护。

改进措施:尽量将列表项的渲染逻辑、点击事件处理和数据逻辑分离开来。适配器应该只负责将数据与视图绑定,而点击事件的处理可以放在Activity、Fragment或其他组件中。使用接口回调或事件总线来在适配器与Activity/Fragment之间传递点击事件。

  1. 错误处理

反思:在处理列表项点击事件时,可能会出现各种错误和异常情况,例如网络错误、数据加载失败等。

改进措施:为可能的错误和异常情况添加适当的错误处理逻辑。确保向用户显示清晰的错误消息,并提供恢复或重试的选项。

  1. 异步处理

反思:在点击事件中执行耗时操作(如网络请求)可能会阻塞UI线程,导致应用程序卡顿。

改进措施:使用异步任务来处理耗时操作。确保在异步任务完成后正确地更新UI,并通知用户操作已完成或失败。

2.3滑动操作

功能实现设想

本人在这里运用的是ViewPager滑动切换页面,布局文件中定义一个 ViewPager,在onCreate方法中,首先调用super.onCreate(savedInstanceState)和setContentView(R.layout.activity_main)来初始化Activity和设置布局。使用findViewById(R.id.vp)找到布局中的ViewPager控件,并将其赋值给变量vp,通过for循环遍历放置图片数组,为每个图片资源ID创建一个新的ImageView对象,并设置其图片资源。将每个ImageView对象添加到显示图片列表中。创建一个匿名内部类,继承自PagerAdapter,并重写其必要的方法。

以此实现对三张风景图的左右滑动浏览。

实际案例的代码及效果

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout 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:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".MainActivity">

    <androidx.viewpager.widget.ViewPager

        android:id="@+id/vp"

        android:layout_width="match_parent"

        android:layout_height="match_parent" />

</LinearLayout>

 package com.example.myapplication;

import androidx.annotation.NonNull;

import androidx.appcompat.app.AppCompatActivity;

import androidx.viewpager.widget.PagerAdapter;

import androidx.viewpager.widget.ViewPager;

import android.annotation.SuppressLint;

import android.os.Bundle;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ImageView;

import java.util.ArrayList;

import java.util.List;

public class MainActivity extends AppCompatActivity {

    private List<View> 显示图片 = new ArrayList<>();

    private int[] 放置图片 = {R.drawable.img1,R.drawable.img2,R.drawable.img3};

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        @SuppressLint({"MissingInflatedId","LocalSuppress"})

        ViewPager vp = findViewById(R.id.vp);

        for (int i = 0;i < 放置图片.length;i++){

            ImageView iv = new ImageView(this);

            iv.setImageResource(放置图片[i]);

            显示图片.add(iv);

        }//图片循环

        vp.setAdapter(new PagerAdapter() {

            @NonNull

            @Override//页面添加

            public Object instantiateItem(@NonNull ViewGroup container, int position) {

                container.addView(显示图片.get(position));

                return 显示图片.get(position);

            }//负责页面显示极为重要

            @Override//返回页面数量

            public int getCount() {

                return 显示图片.size();

            }//告诉控件一共有多少页要显示

            @Override

            public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {

                return view==object;

            }

            @Override

            public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {

               container.removeView(显示图片.get(position));

            }//负责页面销毁

        });

    }

}

案例反思

滑动操作是非常常见的用户交互方式,特别是在处理列表(如RecyclerView)、滚动视图(如ScrollView)或自定义手势时。

  1. 滑动事件监听

反思:在监听滑动事件时,需要注意避免内存泄漏和不必要的回调。不恰当的事件监听器管理可能导致性能问题和资源浪费。

改进:在适当的时候添加和移除滑动事件监听器,例如在视图可见时添加,在视图不可见时移除。使用弱引用来避免内存泄漏,确保在不再需要监听器时能够正确地释放资源。

  1. 滑动冲突

反思:当多个视图或组件在同一屏幕上重叠并都支持滑动操作时,可能会出现滑动冲突。例如,在ScrollView中嵌套RecyclerView时,滑动操作可能会意外地触发错误的组件。

改进:使用嵌套的滚动视图时,仔细管理触摸事件的分发和拦截。考虑使用自定义的滑动逻辑来解决冲突。

  1. 用户体验

反思:滑动操作应该直观且易于使用。不恰当的反馈、响应不灵敏或不符合用户习惯的设计都可能导致不良的用户体验。

改进措施:确保滑动操作的响应速度足够快,使用户感到操作是即时的。

2.4菜单项和对话框

功能实现设想

首先菜单的种类多样,如:选项菜单、子菜单和上下文菜单,当Activity在前台工作的时候,按下menu将会弹出相应的选项菜单。开发选项菜单主要用到Menu,MenuItem及SubMenu。实例:接受用户在菜单中的选项并输出到文本框控件中,选项菜单服务于Activity,而上下文菜单是注册到某个View对象上的。如果一个View对象注册了上下文菜单,用户可以通过长按该View对象以呼叫上下文菜单。

对话框是Activity运行时显示的小窗口,当显示对话框时,当前Activity失去焦点而由对话框负责所有的人机交互。一般来说,对话框用于提示消息或弹出一个与程序主进程直接相关的小程序。

本人就以选项菜单以及简单对话框举例。

实际案例的代码及效果

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item android:title="保存"

        android:id="@+id/save"

        app:showAsAction="always"/>

    <item android:title="设置"

        android:id="@+id/setting"/>

    <item android:title="更多操作" >

        <menu >

            <item android:title="退出"

                android:id="@+id/exit"/>

            <item android:title="操作1" />

            <item android:title="操作2" />

        </menu>

    </item>

</menu>

package com.example.myapplication;

import androidx.annotation.NonNull;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

    }

    //创建OptionMenu

    @Override

    public boolean onCreateOptionsMenu(Menu menu) {

        //通过该方法getMenuInflater(),可以将本人们之前设置的option.xml文件设置为本人们的菜单文件.参数1:传menu资源索引;参数2:本人们的菜单对象,加载菜单资源

        getMenuInflater().inflate(R.menu.option,menu);

        return true;

    }

    @Override

    public boolean onOptionsItemSelected(@NonNull MenuItem item) {

        //获取菜单项对应的Id

        switch (item.getItemId()) {

            case R.id.save:

                Toast.makeText(this,"保存",Toast.LENGTH_SHORT).show();

                break;

            case R.id.setting:

                Toast.makeText(this,"设置",Toast.LENGTH_SHORT).show();

                break;

            case R.id.exit:

                finish();

                break;

        } //OptionMenu菜单项选中的触发方法

        return super.onOptionsItemSelected(item);

    }

}

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:gravity="center"

    tools:context="com.example.xuhao.tongzhiapplication.MainActivity"

    android:weightSum="1">

    <Button

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_gravity="center"

        android:onClick="display"

        android:text="显示对话框" />

</LinearLayout>

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import androidx.appcompat.app.AlertDialog;

import android.view.View;

public class MainActivity extends AppCompatActivity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

    }

    public void display(View view) {

        AlertDialog.Builder builder=new AlertDialog.Builder(this);

        builder.setIcon(R.drawable.ic_launcher_background)

                .setTitle("对话框")

                .setMessage("你点击了对话框")

                .create()

                .show();

    }

}

案例反思

  1. 用户体验

菜单项应该清晰明了,避免使用过于复杂的图标或文本。同时,菜单项的数量也不宜过多,以免给用户带来选择困难。

对话框应该简洁明了,只包含必要的信息和按钮。避免在对话框中显示过多的内容或复杂的操作。

  1. 可访问性

确保菜单项在屏幕阅读器等辅助工具中也能被正确识别和操作。

确保对话框在屏幕阅读器等辅助工具中也能被正确识别和操作。对于非文本内容,应提供替代文本。

  1. 在对话框中执行操作时,应考虑到可能发生的错误,并给出相应的错误提示。同时,对于重要的操作(如删除),应在对话框中进行二次确认,以避免用户误操作。

三:总结

通过学习课程让本人对Android开发中的布局类型和UI界面交互功能有了更深入的理解和实践经验。通过实际操作,本人掌握了如何使用不同的布局类型来构建和优化UI界面,以及如何实现用户与界面的交互功能,巩固了理论知识,更在实践中提升了本人的动手能力和问题解决能力。。同时,也意识到在实际开发中,选择合适的布局类型和合理地设计UI界面交互功能对于提升应用体验和用户满意度具有重要意义。

首先,关于布局类型的学习,本人深刻体会到了不同布局类型的特点和适用场景。例如,LinearLayout的简洁性和易用性,让本人能够快速构建出垂直或水平排列的界面;而RelativeLayout则通过相对定位的方式,让本人能够更灵活地设计复杂的界面布局。此外,ConstraintLayout的强大功能也让本人印象深刻,它提供了更为细致和灵活的控制方式,使得界面布局更加精确和高效。

在实践中,本人逐渐意识到布局类型的选择对于整个应用界面的美观性和用户体验至关重要。一个合理的布局不仅能使界面看起来更加整洁和美观,还能提高用户的使用效率和满意度。因此,在未来的开发中,本人将更加注重布局类型的选择和优化,力求为用户带来更好的使用体验。

其次,关于UI界面交互功能的学习,本人深刻认识到了用户与界面之间交互的重要性。一个优秀的UI界面不仅要美观大方,更要能够提供良好的交互体验。通过实现按钮点击、滑动等交互功能,本人逐渐掌握了如何设计合理的交互逻辑和反馈效果,使得用户能够更加方便和舒适地使用应用。

同时,本人也意识到UI界面交互功能的实现需要综合考虑多个因素,如用户习惯、设备性能等。因此,在未来的开发中,本人将更加注重用户调研和测试,确保所设计的交互功能能够满足用户的实际需求,并具有良好的兼容性和稳定性。

在未来的学习中,因为技术更新快,得跟得上节奏。新技术往往带来新的开发思路和效率提升,保持一颗好奇心,对新技术保持开放态度,让本人在技术海洋里游得更远。本人将继续深入研究Android开发的相关技术,包括自定义控件、适配不同屏幕尺寸和分辨率等高级话题。同时,本人也将关注最新的设计趋势和技术动态,不断提升自己的设计能力和技术水平。

四:参考文献

[1]林学森. 深入理解 Android内核设计思想: 全2册[M]. 2版. 北京: 人民邮电出版社, 2017.

[2]何俊林. Android音视频开发[M]. 北京: 电子工业出版社, 2018.

[3]强波. 深入剖析 Android新特性[M]. 北京: 电子工业出版社, 2018.

[4]黑马程序员. Android移动开发基础案例教程[M]. 北京: 人民邮电出版社, 2017.

[5]管蕾. Android应用开发学习手册[M]. 北京: 清华大学出版社, 2015.

[6]亚当·斯特劳德. Android数据库最佳实践[M]. 廖祜秋, 译. 北京: 电子工业出版社, 2021.

[7]赖友源、李海平、贾羽. 基于Android,app开发程序设计 [D]. 上海交通大学, 2022.

  • 18
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值