安卓程序开发期末总结

#APP程序开发期末总结


前言

本文旨在总结作者在Android应用程序开发课程中的学习成果,重点探讨了五种基本布局,包括线性布局(LinearLayout)、约束布局ConstraintLayout)、表格布局(TableLayout)、帧布局(FrameLayout、相对布局(RelativeLayout)的特性和应用场景,并深入分析了UI界面交互功能的实现方法,包括按钮点击事件、数据传递与回传、进度条与滑动操作、列表视图、滚动视图、下拉列表、自动完成文本框及基本对话框的实践应用。通过理论结合实践的方式,阐述了每种技术和功能的原理、实施步骤及实际案例,同时反思了学习过程中的挑战与应对策略,提出了持续学习和技能提升的途径。
关键词:Android开发,布局技术,UI设计,界面交互,学习成果


提示:以下是本篇文章正文内容,下面案例可供参考

一、安卓各种布局(LinearLayout)

1、线性布局(LinearLayout)

特点
灵活排列:可水平或垂直排列元素,适应不同设计需求。
简单易用:添加元素顺序明确,降低开发难度。
空间均匀:自动分配空间,保持布局整洁。
大小可控:通过权重属性调整元素大小。
支持嵌套:可嵌套使用,创建复杂布局。
对齐可调:使用gravity属性灵活设置对齐方式。
间距可调:padding和margin属性优化布局效果。
适用场景
垂直或水平排列:适合需要顺序排列元素的界面。
复杂布局:通过嵌套不同方向的布局,构建复杂界面。
等宽或等高排列:轻松实现元素等宽或等高布局。
动态元素:支持动态添加或删除子元素,更新界面。。

<LinearLayout  
    android:layout_width="match_parent"  
    android:layout_height="wrap_content"  
    android:orientation="vertical"  
    android:padding="16dp">  
  
    <EditText  
        android:id="@+id/usernameEditText"  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content"  
        android:hint="Username"  
        android:inputType="textPersonName" />  
  
    <EditText  
        android:id="@+id/passwordEditText"  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content"  
        android:hint="Password"  
        android:inputType="textPassword" />  
  
    <Button  
        android:id="@+id/loginButton"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:text="Login" />  
  
</LinearLayout>

在这里插入图片描述

2、约束布局(ConstraintLayout)

特点:

灵活性强:水平和垂直方向都能精确控制组件位置和大小,适应不同屏幕。
相对定位:通过约束条件定义组件间位置关系,实现复杂布局。
丰富约束条件:支持多种对齐、间距等条件,可创建复杂布局结构。
圆形定位和障碍:实现独特布局效果,如围绕中心点旋转或动态调整位置。
Guidelines:设置辅助线帮助定位控件,提升布局效率。
自动添加约束:Autoconnect和Inference功能提高开发速度。
尺寸和宽高比:支持设置组件宽高比和百分比宽高。
动态跟随:组件位置可随其他组件变化而动态调整。

适用场景

复杂界面设计:适用于包含多个组件的复杂界面,确保布局清晰。
适配屏幕尺寸:自动调整组件以适应不同屏幕尺寸和方向。
减少嵌套:减少布局嵌套层级,提高应用性能。
动态调整:支持根据用户交互或应用状态动态改变布局。
创新布局:通过圆形定位和障碍等特性,实现创新布局效果。

<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:layout_width="match_parent"  
    android:layout_height="match_parent"  
    tools:context=".MainActivity">  
  
    <Button  
        android:id="@+id/myButton"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:text="Click Me"  
        app:layout_constraintBottom_toTopOf="@+id/myTextView"  
        app:layout_constraintEnd_toEndOf="parent"  
        app:layout_constraintStart_toStartOf="parent"  
        app:layout_constraintTop_toTopOf="parent"  
        app:layout_constraintVertical_bias="0.2"/>  
  
    <TextView  
        android:id="@+id/myTextView"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:text="Hello, ConstraintLayout!"  
        app:layout_constraintBottom_toBottomOf="parent"  
        app:layout_constraintEnd_toEndOf="parent"  
        app:layout_constraintStart_toStartOf="parent"  
        app:layout_constraintTop_toBottomOf="@+id/myButton"  
        app:layout_constraintVertical_bias="0.5"/>  
  
</androidx.constraintlayout.widget.ConstraintLayout>

在这里插入图片描述

3、表格布局(TableLayout)


特点
结构特点:
类似于HTML表格,使用TableRow定义行,每个TableRow中的视图组件代表一个单元格。
行列设置:
通过嵌套TableRow在TableLayout中创建多行。
使用android:layout_columnWeight属性控制列的宽度比例。
子视图排列:
单元格内可放置一个或多个子视图,实现复杂的布局效果。
外观调整:
支持设置单元格间距和边框样式,以满足不同设计需求。
嵌套使用:
可与其他布局元素嵌套,创建更复杂的界面布局。
适用场景:
数据表格展示:
适用于展示多行多列的数据,如用户信息、订单详情等。
表单布局:
组织输入控件如文本框、单选框、复选框等,实现整齐排列。
计算器界面:
布局数字键和运算符键,支持特定列的拉伸或隐藏。
时间表和日程表:
清晰表示时间和事件的对应关系,适应不同时间段展示。
设置菜单:
以表格形式展示选项或设置项,支持勾选或取消勾选操作。
嵌套布局:
与其他布局元素结合,创建具有标题和内容的复杂界面。

<!-- 在 activity_main.xml 文件中 -->  
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:padding="16dp">  
  
    <!-- 表头行 -->  
    <TableRow  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content"  
        android:background="#DDD">  
  
        <TextView  
            android:layout_width="0dp"  
            android:layout_height="wrap_content"  
            android:layout_weight="1"  
            android:text="姓名"  
            android:gravity="center"/>  
  
        <TextView  
            android:layout_width="0dp"  
            android:layout_height="wrap_content"  
            android:layout_weight="1"  
            android:text="年龄"  
            android:gravity="center"/>  
  
    </TableRow>  
  
    <!-- 数据行 -->  
    <TableRow  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content">  
  
        <TextView  
            android:layout_width="0dp"  
            android:layout_height="wrap_content"  
            android:layout_weight="1"  
            android:text="张三"  
            android:gravity="center"/>  
  
        <TextView  
            android:layout_width="0dp"  
            android:layout_height="wrap_content"  
            android:layout_weight="1"  
            android:text="25"  
            android:gravity="center"/>  
  
    </TableRow>  
  
</TableLayout>

在这里插入图片描述

4、帧布局(FrameLayout)

特点
布局方式
帧布局是一种层叠式的布局,新添加的控件会层叠在先添加的控件之上。默认情况下,所有子控件都会定位在布局的左上角,并且后添加的控件会覆盖先添加的控件。

大小决定
帧布局容器的大小由其内部最大的子控件大小所决定。如果所有子控件大小相同,那么只有最上层的子控件会完全可见。

属性设置
帧布局支持常用的布局属性,如layout_width、layout_height、background等。
padding属性用于调整布局内部空间和子控件之间的间距。
foreground和foregroundGravity属性允许开发者设置一个前景视图及其位置。
layout_gravity属性用于指定子控件在帧布局中的对齐方式,但通常不会对层叠的子控件产生明显效果,因为默认它们是堆叠在一起的。

继承关系
FrameLayout类是ViewGroup的子类,因此它继承了ViewGroup的所有属性和方法。

适用场景

  1. 叠加视图

对话框和菜单:由于帧布局允许视图叠加,因此非常适合用于创建对话框或菜单,其中多个视图元素(如按钮、文本等)需要堆叠在一起。
覆盖效果:当需要在同一位置显示多个视图,但只有一个视图在任何时候都是可见的(如加载提示覆盖在内容上方),帧布局能够轻松实现这种效果。
2. 布局简化

快速布局:对于简单的界面布局,帧布局提供了一种快速且直观的方式来堆叠视图,而无需考虑复杂的布局和对齐规则。
单一位置控制:当多个视图需要共享相同的屏幕位置时,帧布局允许开发者通过简单的层级关系来管理这些视图。
3. 自定义视图

自定义控件:帧布局是创建自定义控件的基础之一,因为它允许开发者在单一容器内组合多个视图元素以实现复杂的交互和视觉效果。
动画和过渡:帧布局允许视图叠加,因此非常适合用于创建复杂的动画和过渡效果,如视图之间的淡入淡出、滑动等。
4. 结合其他布局使用

嵌套布局:帧布局可以与其他布局(如线性布局、相对布局等)结合使用,以创建更复杂的界面结构。例如,可以在帧布局中嵌套一个线性布局来管理一组水平或垂直排列的子视图。
灵活组合:通过结合不同的布局方式,开发者可以根据需求创建出灵活多变的用户界面。

<TextView
    android:layout_width="350dp"
    android:layout_height="350dp"
    android:background="#ff0000"
    android:layout_gravity="center"/>
<TextView
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:background="#00ff00"
    android:layout_gravity="center"
   />
<TextView
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:background="#0000ff"
    android:layout_gravity="center"
    android:text="测试内容"
    android:textColor="#ffffff"
    android:gravity="center"
    />

在这里插入图片描述

5、相对布局(RelativeLayout)

特点
灵活性高:RelativeLayout 允许控件基于其他控件或父控件的边界进行定位,从而提供了极高的布局灵活性。

控件位置相对定义:通过指定一个控件相对于另一个控件或父控件的位置(如左、右、上、下等),可以轻松地实现复杂的布局设计。

减少嵌套布局:使用 RelativeLayout 可以减少布局嵌套层级,从而提高布局性能,减少内存使用和布局渲染时间。

支持层叠效果:控件可以在 RelativeLayout 中相互层叠,这在处理如弹出菜单、对话框等需要覆盖其他控件的场景时非常有用。

属性丰富:RelativeLayout 提供了多种属性(如 layout_toRightOf、layout_below 等),使开发者能够精确地控制控件在布局中的位置。

适用场景
复杂的界面布局:当需要实现多个控件之间的复杂位置关系时,RelativeLayout 可以提供直观且易于管理的解决方案。

灵活调整控件位置:RelativeLayout 的属性允许控件根据其他控件或父布局的位置动态地调整自己的位置,从而适应不同屏幕尺寸和分辨率的设备。

响应式设计:RelativeLayout 可以轻松实现响应式设计,确保界面在不同设备上都能保持良好的显示效果。通过调整控件之间的相对位置关系,可以轻松适应各种屏幕尺寸和分辨率。

实现特定的界面效果:使用 RelativeLayout 可以轻松实现如居中布局、对齐布局等特定的界面效果。通过精确控制控件的位置,可以实现各种复杂的界面布局需求。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:padding="16dp">  
  
    <!-- 顶部的标题栏 -->  
    <TextView  
        android:id="@+id/titleTextView"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:text="标题栏"  
        android:textSize="20sp"  
        android:layout_centerHorizontal="true"  
        android:layout_marginTop="16dp" />  
  
    <!-- 左侧的图标 -->  
    <ImageView  
        android:id="@+id/iconImageView"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:src="@drawable/icon"  
        android:layout_alignParentLeft="true"  
        android:layout_below="@id/titleTextView"  
        android:layout_marginTop="16dp" />  
  
    <!-- 右侧的按钮 -->  
    <Button  
        android:id="@+id/button"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:text="按钮"  
        android:layout_alignParentRight="true"  
        android:layout_below="@id/titleTextView"  
        android:layout_marginTop="16dp"  
        android:layout_marginRight="16dp" />  
  
    <!-- 底部的内容区域 -->  
    <TextView  
        android:id="@+id/contentTextView"  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content"  
        android:text="这里是内容区域"  
        android:textSize="16sp"  
        android:layout_below="@id/iconImageView"  
        android:layout_toRightOf="@id/iconImageView"  
        android:layout_toLeftOf="@id/button"  
        android:layout_marginTop="16dp"  
        android:layout_marginBottom="16dp" />  
  
</RelativeLayout>

在这里插入图片描述

二、UI界面交互功能

1、滑动事件

一个简单的登录页面,当用户点击“登录”按钮时,触发相应的事件来验证用户输入

<LinearLayout  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:padding="16dp"  
    android:orientation="vertical"  
    android:gravity="center_vertical">  
  
    <EditText  
        android:id="@+id/usernameEditText"  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content"  
        android:hint="用户名" />  
  
    <EditText  
        android:id="@+id/passwordEditText"  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content"  
        android:hint="密码"  
        android:inputType="textPassword" />  
  
    <Button  
        android:id="@+id/loginButton"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:text="登录" />  
  
</LinearLayout>
import android.os.Bundle;  
import android.view.View;  
import android.widget.Button;  
import android.widget.EditText;  
import android.widget.Toast;  
import androidx.appcompat.app.AppCompatActivity;  
  
public class LoginActivity extends AppCompatActivity {  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_login);  
  
        Button loginButton = findViewById(R.id.loginButton);  
        loginButton.setOnClickListener(new View.OnClickListener() {  
            @Override  
            public void onClick(View v) {  
                EditText usernameEditText = findViewById(R.id.usernameEditText);  
                EditText passwordEditText = findViewById(R.id.passwordEditText);  
  
                String username = usernameEditText.getText().toString();  
                String password = passwordEditText.getText().toString();  
  
                // 在这里添加你的验证逻辑  
                if (username.isEmpty() || password.isEmpty()) {  
                    Toast.makeText(LoginActivity.this, "用户名和密码不能为空", Toast.LENGTH_SHORT).show();  
                } else {  
                    // 这里可以添加与后端服务器的验证逻辑  
                    // 假设验证成功,显示一个Toast消息  
                    Toast.makeText(LoginActivity.this, "登录成功", Toast.LENGTH_SHORT).show();  
                    // 你可以在这里添加跳转到另一个Activity的代码  
                }  
            }  
        });  
    }  
}

在这里插入图片描述

2、列表项点击事件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent">
  
      <ListView
          android:id="@+id/myListView"
          android:layout_width="match_parent"
          android:layout_height="match_parent"/>
  </RelativeLayout>
 package com.example.app;
 
  import android.os.Bundle;
  import android.view.View;
  import android.widget.AdapterView;
  import android.widget.ArrayAdapter;
  import android.widget.ListView;
  import android.widget.Toast;
  import androidx.appcompat.app.AppCompatActivity;
 
  public class MainActivity extends AppCompatActivity {
 
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
 
          ListView listView = findViewById(R.id.myListView);
          String[] items = {"ikun1", "ikun2", "ikun3"};
 
          ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, items);
          listView.setAdapter(adapter);
 
          listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
              @Override
              public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                  String selectedItem = (String) parent.getItemAtPosition(position);
                  Toast.makeText(MainActivity.this, "Selected: " + selectedItem, Toast.LENGTH_SHORT).show();
              }
          });
      }
  }

在这里插入图片描述

3、列表项点击事件

以下是一个基本的示例,展示了如何在Activity中的某个View上实现基本的滑动检测:

import android.os.Bundle;  
import android.util.Log;  
import android.view.MotionEvent;  
import android.view.View;  
import androidx.appcompat.app.AppCompatActivity;  
  
public class MyActivity extends AppCompatActivity {  
  
    private static final String TAG = "MyActivity";  
    private float downX, downY;  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
  
        // 假设你有一个ID为my_view的View  
        View myView = findViewById(R.id.my_view);  
        myView.setOnTouchListener(new View.OnTouchListener() {  
            @Override  
            public boolean onTouch(View v, MotionEvent event) {  
                switch (event.getAction()) {  
                    case MotionEvent.ACTION_DOWN:  
                        // 按下时记录位置  
                        downX = event.getX();  
                        downY = event.getY();  
                        return true; // 消耗事件  
                    case MotionEvent.ACTION_MOVE:  
                        // 滑动时检测方向  
                        float moveX = event.getX();  
                        float moveY = event.getY();  
                        float deltaX = moveX - downX;  
                        float deltaY = moveY - downY;  
  
                        if (Math.abs(deltaX) > Math.abs(deltaY)) {  
                            // 水平滑动  
                            if (deltaX > 0) {  
                                // 向右滑动  
                                Log.d(TAG, "向右滑动");  
                            } else {  
                                // 向左滑动  
                                Log.d(TAG, "向左滑动");  
                            }  
                        } else {  
                            // 垂直滑动  
                            if (deltaY > 0) {  
                                // 向下滑动  
                                Log.d(TAG, "向下滑动");  
                            } else {  
                                // 向上滑动  
                                Log.d(TAG, "向上滑动");  
                            }  
                        }  
  
                        // 可以在这里重置downX和downY,以检测新的滑动  
                        // 但这取决于你的具体需求  
                        return true; // 消耗事件  
                    case MotionEvent.ACTION_UP:  
                        // 抬起时处理  
                        return true; // 消耗事件  
                    default:  
                        return false; // 其他情况不消耗事件  
                }  
            }  
        });  
    }  
}
<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=".MyActivity">  
  
    <View  
        android:id="@+id/my_view"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:background="#FF0000" /> <!-- 假设是一个红色的View,方便看到 -->  
  
</RelativeLayout>

4、菜单项

实现方法
创建一个菜单资源文件(res/menu/simple_menu.xml),定义菜单项。
在活动的布局文件(res/layout/activity_main.xml)中设置 Toolbar 作为应用栏。
在活动的 Java 文件(MainActivity.java)中,设置 Toolbar 作为支持应用栏,并加载菜单。

<!-- res/menu/simple_menu.xml -->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/menu_home"
        android:title="Home"
        android:icon="@drawable/ic_home" />
    <item
        android:id="@+id/menu_settings"
        android:title="Settings"
        android:icon="@drawable/ic_settings" />
    <item
        android:id="@+id/menu_about"
        android:title="About"
        android:icon="@drawable/ic_info" />
</menu>
<!-- res/layout/activity_main.xml -->
<RelativeLayout 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"
    tools:context=".MainActivity">
 
    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
 
    <!-- Main content goes here -->
    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/toolbar" />
 
</RelativeLayout>
package com.example.simplemenu;
 
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
 
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);
 
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.simple_menu, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_home:
                Toast.makeText(this, "Home selected", Toast.LENGTH_SHORT).show();
                return true;
            case R.id.menu_settings:
                Toast.makeText(this, "Settings selected", Toast.LENGTH_SHORT).show();
                return true;
            case R.id.menu_about:
                Toast.makeText(this, "About selected", Toast.LENGTH_SHORT).show();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}
package com.example.myapplication;
 
public abstract class MenuConstants {
    public static final int MENU_HOME = 1000001;
    public static final int MENU_SETTINGS = 1000002;
    public static final int MENU_ABOUT = 1000003;
}

在这里插入图片描述

5、对话框

布局: 在布局文件中定义一个按钮。
绑定事件: 在活动中为按钮设置点击事件监听器。
显示对话框: 使用 AlertDialog.Builder 创建和显示对话框。
示例代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent">  
  
    <Button  
        android:id="@+id/my_button"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:text="显示对话框"  
        android:layout_centerInParent="true"/>  
  
</RelativeLayout>
import android.app.AlertDialog;  
import android.content.DialogInterface;  
import android.os.Bundle;  
import android.view.View;  
import android.widget.Button;  
import androidx.appcompat.app.AppCompatActivity;  
  
public class MainActivity extends AppCompatActivity {  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
  
        // 找到按钮  
        Button myButton = findViewById(R.id.my_button);  
  
        // 为按钮设置点击事件监听器  
        myButton.setOnClickListener(new View.OnClickListener() {  
            @Override  
            public void onClick(View v) {  
                // 显示对话框  
                showDialog();  
            }  
        });  
    }  
  
    // 显示对话框的方法  
    private void showDialog() {  
        AlertDialog.Builder builder = new AlertDialog.Builder(this);  
        builder.setTitle("标题");  
        builder.setMessage("这是对话框的内容");  
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {  
            @Override  
            public void onClick(DialogInterface dialog, int which) {  
                // 确定按钮被点击后的操作  
                dialog.dismiss();  
            }  
        });  
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {  
            @Override  
            public void onClick(DialogInterface dialog, int which) {  
                // 取消按钮被点击后的操作  
                dialog.dismiss();  
            }  
        });  
        builder.show();  
    }  
}

在这里插入图片描述

在这里插入图片描述

三、学习反思与持续改进总结

1.学习过程

在开始学习安卓开发的过程中,我首先熟悉了安卓开发的基本概念和工具链。这包括了解Android Studio这一集成开发环境(IDE)的基本操作,以及学习Java或Kotlin作为安卓开发的主要编程语言。接着,我深入学习了安卓应用的基本构建模块,如Activity、Fragment、Service等,并掌握了它们之间的交互方式。

随着对基础知识的掌握,我开始学习如何设计用户界面(UI)。这包括学习XML布局文件的使用,以及如何在代码中动态修改UI元素。同时,我也学习了安卓提供的各种UI组件,如按钮、文本框、列表等,并了解了如何通过适配器(Adapter)将数据与UI组件绑定。

在掌握了UI设计后,我进一步学习了安卓的数据存储和网络通信。这包括学习SQLite数据库的使用,以及使用Content Provider进行数据的共享和访问。在网络通信方面,我学习了HTTP请求和JSON解析,以及使用Retrofit等库进行网络请求的封装。

最后,我通过实践项目来巩固所学知识。我选择了一个简单的应用作为起点,如天气应用或新闻阅读器,并尝试将其从设计到实现完整开发出来。在这个过程中,我不断遇到问题、解决问题,并加深对安卓开发的理解。

2.学习反思

在学习安卓开发的过程中,我认识到自己的编程基础还不够扎实,这导致我在学习一些高级概念时感到吃力。因此,我决定加强自己的编程基础,通过练习算法和数据结构来提高自己的编程能力。

同时,我也意识到安卓开发是一个涉及面很广的领域,需要不断学习和探索。因此,我决定保持对新技术和新工具的关注,并尝试将它们应用到自己的项目中。

此外,我还发现自己的学习方法需要改进。以前我总是试图一次性掌握所有知识,但这样往往效果不佳。现在,我采用了一种更加迭代和渐进的学习方法,每次只专注于一个知识点或一个功能,然后将其实现并测试。这种方法让我能够更深入地理解每个知识点,并更好地掌握它们之间的联系。

3.持续改进

为了持续改进自己的安卓开发能力,我计划采取以下措施:
加强编程基础:通过练习算法和数据结构来提高自己的编程能力,并加强对Java或Kotlin语言的理解。
关注新技术和工具:保持对新技术和新工具的关注,并尝试将它们应用到自己的项目中。例如,学习Kotlin Coroutines进行异步编程,或使用Flutter进行跨平台开发。
迭代和渐进的学习:采用迭代和渐进的学习方法,每次只专注于一个知识点或一个功能,并将其实现并测试。这样可以更深入地理解每个知识点,并更好地掌握它们之间的联系。
参与开源项目:加入一些开源项目,与其他开发者一起协作并学习他们的代码风格和最佳实践。这不仅可以提高自己的编程能力,还可以拓宽自己的视野和思维方式。
不断反思和总结:在学习和开发的过程中,不断反思自己的学习和工作方法,并总结经验和教训。这样可以不断改进自己的学习和开发效率,提高自己的技能水平。

结语

安卓开发是一个充满挑战和机遇的领域。通过学习安卓开发,我不仅提高了自己的编程能力,还拓宽了自己的视野和思维方式。我相信只要保持对新技术和新工具的关注,不断学习和探索,我就能够在安卓开发领域取得更大的成就。同时,我也希望能够与其他开发者一起分享和交流经验,共同推动安卓开发的发展。

  • 23
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值