0


【关于Android studio项目开发中各种布局和UI交互的理解】

目录

前言

随着对《APP应用开发》课程的深入学习,我对安卓开发的各个方面有了更全面的理解。本文将总结我在课程中对布局的理解、UI界面交互功能的实现方法,以及在学习过程中的反思与持续改进措施。这些内容将帮助我更好地巩固所学知识,并为今后的开发实践打下坚实基础。

1. 安卓开发中各种布局的理解

在Android的开发中,布局是一种定义用户界面的XML文件,它作为视图对象和视图组的容器,用来确定应用界面的结构。以下为我对Android Studio中五种基本布局的理解:

1.1 线性布局

特点

线性布局主要以水平或垂直方式来排列界面中的控件。并将控件排列到一条直线上。在线性布局中,如果水平排列,垂直方向上只能放一个控件,如果垂直排列,水平方向上也只能方一个控件。

适用场景

适用于简单的界面,如设置页面或表单,适合数量较少的视图。

示例代码
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="按钮1" />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="按钮2" />
</LinearLayout>
效果展示

1.2 约束布局

特点

约束布局可用于构建大型的复杂的布局 , 并且该布局可以只有一层嵌套 , 其解决了开发复杂布局 , 出现的布局嵌套过多问题 , 减少了界面绘制的时间 。

适用场景

适合复杂布局,可以减少嵌套层级,提高性能。

示例代码
<androidx.constraintlayout.widget.ConstraintLayout 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"
    xmlns:app="http://schemas.android.com/apk/res-auto">
        
        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="左对齐"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.009"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.045" />

        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="居中对齐"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.175" />

        <Button
            android:id="@+id/button3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="右对齐"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="1.0"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.303" />
</androidx.constraintlayout.widget.ConstraintLayout>
效果展示

1.3 表格布局

特点

表格布局是 Android 中一种用于排列视图的布局管理器,采用行和列的网格结构,适合展示结构化数据,如表格和表单。其特点包括灵活的单元格、自动调整大小和简单易用,能够清晰地排列标签和输入框。

适用场景

适用场景包括数据展示、统计信息和固定结构的布局,尤其在需要明确视觉结构的应用中表现优越。

示例代码
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

        <TableRow>
                <TextView
                    android:layout_width="50dp"
                    android:text="行1列1" />
                <TextView
                    android:layout_width="50dp"
                    android:text="行1列2" />
        </TableRow>

        <TableRow>
                <TextView
                    android:layout_width="50dp"
                    android:text="行2列1" />
                <TextView
                    android:layout_width="50dp"
                    android:text="行2列2" />
        </TableRow>

</TableLayout>
效果展示

1.4 帧布局

特点

帧布局用于在单一空间中叠加多个视图,后面的视图会被前面的视图遮盖,结构简单且易于理解。

适用场景

适用于单个视图展示、背景与前景叠加,以及动态内容加载等场景,特别适合需要视图叠加和不复杂排列的界面设计。

示例代码
<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:orientation="vertical"
    tools:context=".MainActivity">

        <FrameLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:layout_gravity="center_horizontal">

        <TextView
            android:id="@+id/tv_bottom"
            android:layout_width="300dp"
            android:layout_height="300dp"
            android:layout_gravity="center"
            android:background="#CB9DEC"
            android:text="@string/bottom"
            android:textColor="#ffff00"
            android:textSize="30sp" />

        <TextView
            android:id="@+id/tv_middle"
            android:layout_width="200dp"
            android:layout_height="200dp"
            android:layout_gravity="center"
            android:background="#A9E8E6"
            android:text="@string/middle"
            android:textColor="#ffff00"
            android:textSize="30sp" />

        <TextView
            android:id="@+id/tv_top"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_gravity="center"
            android:background="#FBACAC"
            android:text="@string/top"
            android:textColor="#ffff00"
            android:textSize="30sp" />
        </FrameLayout>

</LinearLayout>
效果展示

1.5 相对布局

特点

允许子视图相对于彼此或父布局进行定位。可以指定一个视图的顶部对齐另一个视图的底部,或者让一个视图与另一个视图的左边对齐等。

适用场景

适用于需要多视图相互关联的复杂布局。

示例代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="94dp">

                <TextView
                    android:id="@+id/textView1"
                    android:layout_width="81dp"
                    android:layout_height="wrap_content"
                    android:text="Text" />

                <Button
                    android:layout_width="107dp"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/textView1"
                    android:layout_marginTop="28dp"
                    android:text="Button" />
        </RelativeLayout>
</LinearLayout>
效果展示

2. UI界面交互功能的实现

2.1 按钮点击事件

实现方法

在代码的设计过程中,我在XML布局文件中定义了按钮,并在对应的Activity或Fragment的Java文件中,使用setOnClickListener为按钮绑定事件监听器。在监听器的onClick方法中,我编写了处理点击后逻辑的代码,更新界面或执行其他操作。

实际案例

我设计了一个简单的Android按钮点击事件的示例,展示了如何在一个基本的Activity中实现按钮点击事件并响应用户的点击。

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    private TextView textView;
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

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

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                textView.setText("按钮已点击!");
            }
        });
    }
}
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center">

        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮未点击"
            android:textSize="18sp" />

        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="点击我" />
</LinearLayout>
效果展示

反思

通过实践,我意识到了设计有许多可以改进的地方,比如使用匿名内部类处理点击事件使得代码简洁,但在更复杂的应用中,可以考虑使用Lambda表达式或其他模式(如MVC)来提升可读性。

2.2 列表项点击事件

实现方法

在展示列表数据时,在

ListView的

每个列表项中设置点击监听器。点击列表中的项时,屏幕上会弹出显示用户选择的项目名称的消息。

实际案例

开发一个水果店铺列表,用户选择水果时,屏幕上会弹出用户选择的水果名称的消息。

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
    ListView listView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView=(ListView) findViewById(R.id.list_view);
        String[] data={"菠萝","芒果","石榴","葡萄", "苹果", "橙子", "西瓜"};
        ArrayAdapter<String> adapter=new ArrayAdapter<>(MainActivity.this,android.R.layout.simple_list_item_1,data);
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener()
        {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int i, long l) {
                String result=((TextView)view).getText().toString();
                Toast.makeText(MainActivity.this,"您选择的水果是:"+result,Toast.LENGTH_LONG).show();
            }
        });
    }
}
<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">
        <ListView
            android:id="@+id/list_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
</LinearLayout>
效果展示

反思

在代码的设计中使用了

LinearLayout

和简单的

ListView

,适合当前需求。可以考虑在后续引入更复杂的布局,如

RecyclerView

,以支持更复杂的列表项设计和性能优化。

2.3 滑动操作

实现方法

代码中使用了 RecyclerView 来显示水果列表,应用的主要界面是 MainActivity,其中定义了一个 ArrayList<String> 作为数据源,用于存储水果名称。通过自定义的 RecyclerView.Adapter 将数据与 RecyclerView 连接,并设置了适当的布局管理器以支持垂直滚动。

布局文件采用 RelativeLayout,并在其中定义了一个 RecyclerView,使其占满整个屏幕。这种实现提供了流畅的滚动体验和更高的性能,适合展示较大数量的数据,用户可以轻松浏览水果项。

实际案例

这是一个简单的纯文字滑动列表,应用为提供了用户一个流畅的滚动浏览体验,用户可以方便地查看所有水果项。

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.Arrays;

public class MainActivity extends Activity {

    private ArrayList<String> mDataList;

    private ListView mListView;

    private ArrayAdapter<String> mAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mDataList = new ArrayList<>(Arrays.asList(
                "苹果", "香蕉", "橙子", "西瓜", "葡萄",
                "草莓", "菠萝", "桃子", "樱桃", "柠檬",
                "猕猴桃", "火龙果", "蓝莓", "杏子", "梨",
                "椰子", "百香果", "芒果", "李子", "橘子"
        ));

        mListView = findViewById(R.id.list_view);
        mAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, mDataList);
        mListView.setAdapter(mAdapter);
    }
}
<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="com.example.book.MainActivity" >

        <ListView
            android:id="@+id/list_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
        </ListView>

</RelativeLayout>
效果展示

反思

在这次的开发中,可以考虑将

ListView

替换为

RecyclerView

,因为它提供了更好的性能和灵活性,特别是在处理大量数据时。在后续改进中可以考虑实现

onStart

onStop

方法,以便在需要时管理资源或更新 UI。

2.4 菜单项

实现方法

对于所有菜单类型,Android提供了标准的XML格式来定义菜单项。定义菜单项方法可以在XML菜单资源中定义菜单及其所有项,也可通过代码方式进行构建。

实际案例

在设置页面添加一个“设置、关于、帮助”的菜单项

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {     
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        } else if (id == R.id.action_about) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/action_settings"
        android:title="设置"
        android:orderInCategory="100"
        app:showAsAction="never" />

    <item
        android:id="@+id/action_about"
        android:title="关于"
        android:orderInCategory="200"
        app:showAsAction="never" />

    <item
        android:id="@+id/action_help"
        android:title="帮助"
        android:orderInCategory="200"
        app:showAsAction="never" />

</menu>
效果展示

反思

在后续的开发中,如果应用功能较多,可以考虑使用子菜单来组织相关功能,减少主菜单的复杂性。还可以根据用户的状态或权限动态添加或隐藏菜单项,提高灵活性和用户体验。

2.5 对话框

实现方法

这段代码实现了在 Android 应用中弹出简单对话框的功能。首先加载布局 activity_main.xml,获取按钮并设置点击事件,调用 showDialog 方法显示对话框。在该方法中,使用 AlertDialog.Builder 创建对话框,设置标题、消息和两个按钮(确定和取消),最后显示对话框。用户点击按钮后即可进行交互。

实际案例

展示一个确认是否退出应用的对话框

import android.app.AlertDialog;
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 showDialogButton = findViewById(R.id.show_dialog_button);
        showDialogButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showDialog();
            }
        });
    }

    private void showDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("对话框")
                .setMessage("确定是否退出应用。")
                .setPositiveButton("确定", (dialog, which) -> {
                })
                .setNegativeButton("取消", (dialog, which) -> {
                    dialog.dismiss();
                });

        AlertDialog dialog = builder.create();
        dialog.show();
    }
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

        <Button
            android:id="@+id/show_dialog_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="显示对话框"
            android:layout_centerInParent="true" />

</RelativeLayout>
效果展示

反思

后续改进中可以考虑在对话框中添加图标或自定义视图,提升视觉效果和用户交互体验。

3. 改进措施

在持续深化安卓 UI 界面交互技能的过程中,我采取了一系列实际而专业的改进措施,确保在技术更新迭代的浪潮中不断提升自己的能力。以下是我的具体做法:

3.1 系统查阅官方文档

每当我学习新的功能或库时,首先会查阅 Android 官方文档。这不仅帮助我理解 API 的使用方法,还能深入了解最佳实践和性能优化的建议。
在阅读文档时,我会做笔记,记录下关键的概念和代码示例,以便将来参考。

3.2 参与社区讨论

访问开发者论坛和技术社区,如 Stack Overflow 和 CSDN,参与讨论并分享我的经验。这让我能够从其他开发者的视角获取新见解和解决方案。

3.3 学习新技术

参加在线课程和研讨会,学习新兴的 Android 技术,如 Jetpack 组件和现代架构模式。这些课程帮助我掌握最新的开发工具和方法,提高开发效率。同时还会关注技术博客和播客,获取最新的行业动态和技巧。

3.4 持续自我反思

定期回顾和反思自己的学习与实践过程,评估哪些策略有效,哪些需要调整。这种自我反馈机制帮助我不断调整学习方向和实践重点。

4. 总结

通过本次总结性的博客,我对安卓开发中的布局与UI交互有了更深刻的理解。这些知识不仅为我的学习提供了支持,也为我今后的开发实践打下了坚实的基础。

大数据与计算机学院B22计算机科学与技术一班

标签: android studio

本文转载自: https://blog.csdn.net/2301_78327555/article/details/143244231
版权归原作者 202202151118 所有, 如有侵权,请联系我们删除。

“【关于Android studio项目开发中各种布局和UI交互的理解】”的评论:

还没有评论