2025.3.10(周一)

news/2025/3/24 14:40:56/文章来源:https://www.cnblogs.com/Sunyiran/p/18787505

实验二:UI设计

实验目的

本次实验的目的是让大家熟悉Android开发中的UI设计,包括了解和熟悉常用控件的使用、界面布局和事件处理等内容。

实验要求

  1. 熟悉和掌握界面控件设计
  2. 了解Android界面布局
  3. 掌握控件的事件处理

实验内容

一、       常用控件

1、  常用控件介绍

(1)基本控件

  • TextView:用于显示文本内容,可以设置字体、颜色、大小等属性。
  • EditText:用于输入文本,可设置输入类型,如密码、数字、邮箱等。
  • Button:按钮控件,支持点击事件。
  • ImageView:用于显示图片,支持从资源文件、URL加载图片。
  • CheckBox:复选框,可用于多选操作。
  • RadioButtonRadioGroup:单选按钮,通常配合RadioGroup使用,实现单选功能。
  • Switch / ToggleButton:用于开启或关闭某个选项。

(2)选择控件

  • Spinner:下拉选择框,用户可以从列表中选择一个选项。
  • SeekBar:滑动条,可用于音量、亮度等调节。
  • RatingBar:评分控件,通常用于显示星级评分。

(3)进度控件

  • ProgressBar:进度条,可以是水平或环形,适用于加载或下载任务。
  • SeekBar:滑动条,可用于调整进度值。

(4)布局控件

  • LinearLayout:线性布局,子控件可垂直或水平排列。
  • RelativeLayout(已废弃,建议使用ConstraintLayout):子控件可相对定位。
  • ConstraintLayout:更灵活的布局方式,适用于复杂的UI设计。
  • FrameLayout:适用于叠加视图,比如Fragment。
  • GridLayout:类似表格的布局,支持多行多列。

(5)列表和网格

  • RecyclerView:用于显示大数据列表,支持水平、垂直滚动,替代ListView。
  • ListView(已不推荐):用于显示垂直列表,性能较RecyclerView差。
  • GridView:用于显示网格布局的数据列表。

(6)高级控件

  • ViewPager2:用于实现页面滑动,常用于轮播图或选项卡。
  • WebView:用于加载网页内容,可以加载URL或HTML代码。
  • CardView:卡片式布局,适用于美观的UI设计。
  • Toolbar:增强版的ActionBar,可自定义导航栏。

(7)对话框和通知

  • AlertDialog:弹出提示框,可设置按钮、列表等。
  • Toast:短暂提示信息,通常用于显示轻量级通知。
  • Snackbar:类似Toast,但支持交互按钮,比如“撤销”操作。
  • Notification:系统通知,可用于消息推送。

(8)手势和交互

  • GestureDetector:监听手势,如单击、双击、滑动等。
  • SwipeRefreshLayout:下拉刷新控件,常用于RecyclerView和ListView。

2、  控件的实现

我们改变xml文件的格式使之可以输入文本、出现按钮

activity_main.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:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="220dp"
        android:text="Hello World!"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.523"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/editText"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:hint="Please write down your first Android code"
        android:padding="16dp"
        android:layout_marginTop="16dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Submit"
        app:layout_constraintTop_toBottomOf="@id/editText"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:layout_marginTop="16dp" />

</androidx.constraintlayout.widget.ConstraintLayout>

package com.example.sy1;

import android.os.Bundle;
import android.widget.EditText;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.constraintlayout.widget.ConstraintSet;

public class hw extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);  // 假设布局文件名是 activity_hw.xml

        // 获取布局和视图对象
        ConstraintLayout constraintLayout = findViewById(R.id.main);
        TextView textView = findViewById(R.id.textView);
        EditText editText = findViewById(R.id.editText);

        // 创建 ConstraintSet 对象来修改约束
        ConstraintSet constraintSet = new ConstraintSet();
        constraintSet.clone(constraintLayout);  // 克隆现有布局的约束

        // 设置 EditText 的顶部约束连接到 TextView 的底部
        constraintSet.connect(editText.getId(), ConstraintSet.TOP, textView.getId(), ConstraintSet.BOTTOM);

        // 应用新的约束
        constraintSet.applyTo(constraintLayout);
    }
}

 

hw.java

package com.example.sy1;

import android.os.Bundle;
import android.widget.EditText;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.constraintlayout.widget.ConstraintSet;

public class hw extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);  // 假设布局文件名是 activity_hw.xml

        // 获取布局和视图对象
        ConstraintLayout constraintLayout = findViewById(R.id.main);
        TextView textView = findViewById(R.id.textView);
        EditText editText = findViewById(R.id.editText);

        // 创建 ConstraintSet 对象来修改约束
        ConstraintSet constraintSet = new ConstraintSet();
        constraintSet.clone(constraintLayout);  // 克隆现有布局的约束

        // 设置 EditText 的顶部约束连接到 TextView 的底部
        constraintSet.connect(editText.getId(), ConstraintSet.TOP, textView.getId(), ConstraintSet.BOTTOM);

        // 应用新的约束
        constraintSet.applyTo(constraintLayout);
    }
}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <application
        android: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.Sy1"
        tools:targetApi="31">
        <activity
            android:name=".hw"
            android:exported="true">

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".MainActivity" android:exported="true"/>

    </application>

</manifest>

最后页面效果为

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/904064.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计一个简单的圆柱形情绪灯

步骤1:打印零件和闪光WLED 3D打印外壳 下载提供的STL或STEP文件,并将它们加载到您首选的切片软件中。调整设置(填充,层高度,支撑),如果需要,打印每个部分。我使用白色PLA,填充15%,层高0.2mm。对于扩散器,它只是一个固体圆柱体,在花瓶模式下打印它。 一旦打印完成,把…

构建一个Pedro Robot

Pedro 2.0是一个完全开源的项目,旨在为每个人提供可访问和可定制的服务。Pedro Robot是一个完全开源的项目,设计为每个人都可以访问和定制。组装起来很容易,不需要螺丝,不需要胶水,不需要工具!完美的制造商,学生和教育工作者希望探索机器人和编程。 所有文档都可以在Pedr…

一文搞懂MCP协议与Function Call的区别

一、前言 大家好,我是六哥! 今天咱们聊聊编程里两个听起来有点复杂的概念——MCP协议和函数调用(function call),其实用大白话来讲,它们就是两种不同的“沟通方式”,就像咱们人与人之间交流也有不同的方式一样。下面我就用生活中的例子和Python代码,给大家好好讲讲它们…

基于Arduino设计RFID门锁系统

使用基于arduino的RFID锁系统实现无缝,无钥匙进入和增强保护,从而改变您的门安全性。你是否厌倦了每次需要开门时都要找钥匙?不如建一个智能锁系统,你只需刷卡就能开门?在本节中,我们将学习如何使用Arduino构建RFID门锁系统。这是一种既有趣又安全的开门方式。 这个Ardui…

MQ消息持久化解决方案

消息持久化 1. RabbitMQ 发送与消费消息的模型2. 消息丢失的几种情况?生产者发送消息未到达交换机消息到达交换机,没有正确路由到队列MQ 宕机,队列中的消息不见了消费者收到消息,还没消费,消费者宕机3. 如何保证消息不丢失? 3.1 生产者确认机制publisher-confirm消息成功…

『Plotly实战指南』--柱状图绘制高级篇

在数据可视化的世界里,柱状图是一种直观且强大的工具,用于展示数据的分布、比较和趋势。 从基础的柱状图出发,我们可以进一步探索更复杂的图表类型,如分组柱状图和堆积柱状图,它们在处理多维数据和复杂关系时具有独特的优势。 本文将深入探讨如何使用Plotly库绘制这些高级…

读DAMA数据管理知识体系指南28文件和内容管理概念(下)

读DAMA数据管理知识体系指南28文件和内容管理概念(下)1. 文件和档案 1.1. 文件(Document)是包含任务说明,对执行任务或功能的方式和时间的要求以及任务执行和决策的日志等的电子或纸质对象 1.2. 只有部分文件才能称为档案(Record)1.2.1. 档案可用于证明所做的决策和所采取的…

AMD Instinct™MI300系列微架构

AMD Instinct™MI300系列微架构 AMD Instinct MI300系列加速器基于AMD CDNA 3架构,旨在为HPC、人工智能(AI)和机器学习(ML)工作负载提供领先性能。AMD Instinct MI300系列加速器非常适合极端的可扩展性和计算性能,可以在单个服务器到世界上最大的EB级超级计算机的所有设备…

节点级架构与MI300和MI200系列性能计数器和指标

节点级架构 MI300系列节点级架构,显示了8个完全互连的MI300X OAM模块,通过重定时器和HGX连接器连接到(可选)PCIEe交换机。 如图5-9所示,显示了具有双插槽配置的AMD EPYC处理器和八个AMD Instinct MI300X加速器的系统的节点级架构。MI300X OAM通过PCIe Gen 5 x16链路(黄线…

推荐专著《AI芯片开发核心技术详解》(1)、《智能汽车传感器:原理设计应用》(2)、《TVM编译器原理与实践》(3)、《LLVM编译器原理与实践》(4)

4本书推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该…

GPU到GPU通信选项

GPU到GPU通信选项 将讨论使用AMD Instinct™MI250和AMD InstinctTM MI250X GPU的系统中的GPU到GPU通信选项。每个MI250(X)GPU由两个图形计算芯片(GCD)组成。如图4-20所示,显示了具有4个MI250 GPU(8个GCD)的节点的示意图。每个绿色框代表一个MI250 GPU和两个GCD。GCD通过…

2025年3月月记

2025.3.1 新的一月到来啦!今天干了个啥呢?好像没干啥也是把昨天编程学习的作业做了,待会又要去学S组的知识了,我先去刷题了。。。 OK啊,也是把课学完了,待会我又要去打atcoder了,今天学的是差分约束,其实就是图上的知识,主要的表达形式是:u <= v + w或者u >= v…