安卓开发学习---kotlin版---笔记(二)

UI学习

UI分类

安卓的UI分为两大类:一类叫做View视图,一类叫做ViewGroup容器

  • View视图:TextView,Button,ImageView都是常见的视图
  • ViewGroup容器:内部尅承载、放置、添加View视图的容器

布局方式

安卓布局主要有:线性布局、相对布局、帧布局、约束布局

LinearLayout线性布局

LinearLayout线性布局:横着或者竖着 按顺序排列
其属性主要有:

  • orientation:排列方向,主要有vertical垂直排列、horizontal水平排列
  • layout_width/height:宽度,主要有三种类型
  1. 填充父容器剩余空间:match_parent
  2. 根据子视图宽度自适应自己的宽高:wrap_content
  3. 自定义大小,比如50dp
  • background:背景颜色
  • gravity:重力,决定子控件相对该父容器的位置。主要有三种:
    center:居中显示
    horizontal_center:水平居中
    vertical_center:垂直居中
  • layout_gravity:决定该容器相对它的父容器的位置
<?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"android:background="#FF2299"android:gravity="center"><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:backgroundTint="#FF00FF"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:backgroundTint="#FFFF00"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:backgroundTint="#00FF00"/></LinearLayout>

效果

RelativeLayout相对布局

在摆放子视图位置时,按照指定的参考系摆放子视图的位置,默认以屏幕左上角(0, 0)位置作为参考系摆放位置
主要有三大类:

  • 相对父元素
  • 相对兄弟元素
  • 相对兄弟元素对齐方式

在这里插入图片描述

在这里插入图片描述

<?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"><Buttonandroid:id="@+id/btn1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:insetTop="0dp"android:insetBottom="0dp"android:text="按钮1"/><Buttonandroid:id="@+id/btn2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:insetTop="0dp"android:insetBottom="0dp"android:text="按钮2"android:layout_toRightOf="@id/btn1"android:layout_below="@id/btn1"/><Buttonandroid:id="@+id/btn3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:insetTop="0dp"android:insetBottom="0dp"android:text="按钮3"android:layout_toRightOf="@id/btn2"android:layout_below="@id/btn2"/><Buttonandroid:id="@+id/btn4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:insetTop="dp"android:insetBottom="0dp"android:text="按钮4"android:layout_toRightOf="@id/btn3"android:layout_below="@id/btn3"/>
</RelativeLayout>

在这里插入图片描述

FrameLayout帧布局

组件的默认位置都是左上角,组件之间可以重叠
设置方式与线性布局相似


具体UI

Button之MaterialButton

Material: 重要的
MaterialButton是Google推出的新控件,比较好用

使用步骤:

  • 1.添加依赖
    在app下的build.gradle文件下,dependencies里,添加依赖:implementation 'com.google.android.material:material:1.10.0'
    然后执行:Sync Now
    在这里插入图片描述

  • 2.修改app的theme主题
    修改地方:

在这里插入图片描述

将其parenter修改为:Theme.MaterialComponents.Light.NoActionBar

一些常见属性:

在这里插入图片描述

写的一些效果:
在这里插入图片描述

MaterialButtonToggleGroup

类似于iOS的segment

在这里插入图片描述

<com.google.android.material.button.MaterialButtonToggleGroupandroid:id="@+id/material_group"android:layout_width="match_parent"android:layout_height="60dp"android:layout_marginLeft="10dp"android:layout_marginRight="10dp"android:gravity="center"app:checkedButton="@id/btn2"><com.google.android.material.button.MaterialButtonandroid:id="@+id/btn1"android:layout_width="0dp"android:layout_height="50dp"android:layout_weight="1"android:text="TAB1"app:cornerRadius="15dp"android:insetTop="0dp"android:insetBottom="0dp"android:gravity="center"/><com.google.android.material.button.MaterialButtonandroid:id="@+id/btn2"android:layout_width="0dp"android:layout_height="50dp"android:layout_weight="1"android:text="TAB2"app:cornerRadius="20dp"android:insetTop="0dp"android:insetBottom="0dp"android:gravity="center"/><com.google.android.material.button.MaterialButtonandroid:id="@+id/btn3"android:layout_width="0dp"android:layout_height="50dp"android:layout_weight="1"android:text="TAB3"app:cornerRadius="20dp"android:insetTop="0dp"android:insetBottom="0dp"android:gravity="center"/></com.google.android.material.button.MaterialButtonToggleGroup>

监听的时候:

        //通过id,找到对象val toggleGroup = findViewById<MaterialButtonToggleGroup>(R.id.material_group)//对象添加监听//参数是一个接口,前面需要加上object: 关键字toggleGroup.addOnButtonCheckedListener(object: MaterialButtonToggleGroup.OnButtonCheckedListener{//里面是实现接口的方法override fun onButtonChecked(group: MaterialButtonToggleGroup?,checkedId: Int,isChecked: Boolean) {Log.e("MaterialButton", "${checkedId}, ${isChecked.toString()}");}})

TextView

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center_horizontal"><TextViewandroid:id="@+id/textView2"android:layout_width="200dp"android:layout_height="160dp"android:text="111111111111111111111111111111"android:textSize="22dp"android:textColor="#ffffff"//使用这个,跑马灯才管用android:singleLine="true"android:background="@color/purple_700"android:layout_marginTop="30dp"android:ellipsize="marquee"android:marqueeRepeatLimit="-1"android:focusable="true"android:focusableInTouchMode="true"android:drawableLeft="@android:drawable/btn_star"android:drawableRight="@android:drawable/btn_star"android:drawableTop="@android:drawable/btn_dialog"android:drawableBottom="@android:drawable/btn_dropdown"/></LinearLayout>在activity里面调用:val tv = findViewById<TextView>(R.id.textView2)
tv.requestFocus()

在这里插入图片描述

ImageView

图片名不能以数字开头

  • center :保持原图的大小,显示在ImageView的中心。当原图的长(宽)大于ImageView的长(宽),超过部分裁剪处理。
  • centerCrop :以填满整个ImageView为目的,将原图的中心对准ImageView的中心,等比例放大原图,直到填满ImageView为止(指的是ImageView的宽和高都要填满),原图超过ImageView的部分作裁剪处理。
  • centerInside :以原图完全显示为目的,将图片的内容完整居中显示,通过按比例缩小原图的长(宽)等于或小于ImageView的长(宽)。如果原图的长宽本身就小于ImageView的长宽,则原图不作任何处理,居中显示在ImageView。
  • fitCenter :把原图按比例扩大或缩小到ImageView的ImageView的高度,居中显示
  • fitEnd :把原图按比例扩大(缩小)到ImageView的高度,显示在ImageView的下部分位置
  • fitStart :把原图按比例扩大(缩小)到ImageView的高度,显示在ImageView的上部分位置
  • fitXY :把原图按照指定的大小在View中显示,拉伸显示图片,不保持原比例,填满ImageView.
  • matrix :不改变原图的大小,从ImageView的左上角开始绘制原图,原图超过ImageView的部 分作裁剪处理。

RecyclerView

类似:tableView+collectionView

adapter:数据源

来一个简单的List

private val data = listOf("Apple", "Banana", "Orange", "Watermelon", "Pear", "Grape", "Pineapple", "Strawberry", "Cherry", "Mango", "Apple", "Banana", "Orange", "Watermelon", "Pear", "Grape", "Pineapple", "Strawberry", "Cherry", "Mango")override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)//注意:android.R.layout.simple_list_item_1val adapter = ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data)val recyclerView = findViewById<ListView>(R.id.listView)recyclerView.adapter = adapter}在xml上,写上ListView<ListViewandroid:id="@+id/listView"android:layout_width="match_parent"android:layout_height="match_parent"/>

在这里插入图片描述

自定义列表

使用:recyclerView


class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)//找到recyclerViewval recyclerView = findViewById<RecyclerView>(R.id.recyclerView)//管理者,负责列表的布局recyclerView.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)recyclerView.adapter = MyAdapter1()}//创建一个adapter,负责数据的适配class MyAdapter1: RecyclerView.Adapter<MyViewHolder>() {override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {//找到itemval cellView = LayoutInflater.from(parent.context).inflate(R.layout.textview_test, parent, false)return MyViewHolder(cellView)}//个数override fun getItemCount(): Int {return 20}override fun onBindViewHolder(holder: MyViewHolder, position: Int) {}}//负责列表的复用class  MyViewHolder(view: View): RecyclerView.ViewHolder(view){}
}

在这里插入图片描述

跳转

显示跳转:

        val btn = findViewById<MaterialButton>(R.id.jump_button)btn.setOnClickListener {val intent = Intent(this, secondActivity::class.java)//传值intent.putExtra("key", "22222")startActivity(intent)}//接收值val dataString = intent.getStringExtra("key")

例子:

在这里插入图片描述

作业结果:

在这里插入图片描述

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

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

相关文章

【智能算法】11种混沌映射算法+2种智能算法示范【鲸鱼WOA、灰狼GWO算法】

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 混沌映射算法是我们在智能算法改进中常用到的方法&#xff0c;本程序充分考虑改进算法应用的便捷性&#xff0c;集成了11种混合映射算法&#xff0c;包括Singer、tent、Logistic、Cubic、chebyshev、Piecewise…

原生html + vue3 获取引用元素refs - elementUI如何在setup中进行表单校验设置

背景&#xff1a; 原生Html 引入elementPlust vue3 &#xff0c;需要在vue3 setup里做表单校验&#xff0c;通过el-form refform 的refs元素执行校验。 解决方案1&#xff1a; 保存vue挂载之后实例vm为一个常量&#xff0c;由实例来获取&#xff1a;vm.$refs.form.validate(…

iClient3D 图元操作

1. S3MTilesLayer&#xff0c;S3M(Spatial 3D Model)图层类 S3MTilesLayer&#xff0c;S3M(Spatial 3D Model)图层类&#xff0c;通过该图层实现加载三维切片缓存&#xff0c;包括倾斜摄影模型、BIM模型、点云数据、精细模型、矢量数据、符号等。 那S3MTilesLayer中针对图元的…

AI性能再提升12.5%,ZStack Cube 超融合一体机基于第五代英特尔®至强®可扩展处理器解决方案发布

12月15日&#xff0c;以“Al无处不在&#xff0c;创芯无所不及”为主题的2023英特尔新品发布会暨AI技术创新派对上&#xff0c;云轴科技ZStack与英特尔联合发布基于第五代英特尔 至强 可扩展处理器的 ZStack Cube 超融合一体机解决方案白皮书&#xff08;简称解决方案&#xff…

二进制枚举算法

二进制 : 也就是只有0和1的进制表示 ; 二进制枚举算法 一个二进制数 x 可以表示 S 的一个子集&#xff0c;某个二进制位i上为0表示没有选i元素&#xff0c;为1表示选了该元素放入子集,比如13为1101就表示选了0,2,3号元素;对于一个长度为N的序列(也就是包含N个元素)有2^N个子…

C++之程序生成

一、C的发展史 截止到2023年12月&#xff0c;C已经更新了很多版本&#xff0c;并在每个版本中修复了bug和添加了新的特性&#xff0c;ISO C委员会每三年会对C进行一次更新&#xff1a; C98&#xff1a;于1998年发布&#xff0c;是最早的国际标准化版本。它包含了面向对象编程…

亚马逊云科技re_Invent 2023产品体验:亚马逊云科技产品应用实践 王炸产品Amazon Q,你的AI助手

本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 意料之中 2023年9月25日&#xff0c;亚马逊宣布与 Anthropic 正式展开战略合作&#x…

机器学习 | 决策树 Decision Tree

—— 分而治之&#xff0c;逐个击破 把特征空间划分区域 每个区域拟合简单模型 分级分类决策 1、核心思想和原理 举例&#xff1a; 特征选择、节点分类、阈值确定 2、信息嫡 熵本身代表不确定性&#xff0c;是不确定性的一种度量。 熵越大&#xff0c;不确定性越高&#xff0c;…

OpenAI 偷偷在训练 GPT-4.5!?

最近看到有人已经套路出 ChatGPT 当前的版本&#xff0c;回答居然是 gpt-4.5-turbo&#xff1a; 实际试验下&#xff0c;用 starflow.tech&#xff0c;切换到小星 4 全能版&#xff08;同等官网最新 GPT-4&#xff09;&#xff0c;复制下面这段话问它&#xff1a; What is the…

人工智能在金融与商业领域的智能化变革

导言 随着人工智能技术的不断发展&#xff0c;金融和商业领域正迎来一场智能化的变革。随着人工智能的不断发展&#xff0c;其在金融和商业领域的应用正成为业界瞩目的焦点。本文将深入探讨人工智能在金融和商业应用中的关键技术、应用场景以及对未来的影响。 1. 关键技术与算…

数据结构:队列

数据结构&#xff1a;队列 文章目录 数据结构&#xff1a;队列1.队列常用操作&#xff1a;2.队列的实现3.队列典型应用 ***「队列 queue」是一种遵循先入先出规则的线性数据结构。***队列模拟了排队现象&#xff0c;即新来的人不断加入队列尾部&#xff0c;而位于队列头部的人逐…

ceph的osd盘删除操作和iscsi扩展

ceph的osd盘删除操作 拓展:osd磁盘的删除(这里以删除node1上的osd.0磁盘为例) 1, 查看osd磁盘状态 [rootnode1 ceph]# ceph osd tree ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0.00298 root default -3 0.00099 host node10 hdd 0.00…

微服务实战系列之ZooKeeper(下)

前言 通过前序两篇关于ZooKeeper的介绍和总结&#xff0c;我们可以大致理解了它是什么&#xff0c;它有哪些重要组成部分。 今天&#xff0c;博主特别介绍一下ZooKeeper的一个核心应用场景&#xff1a;分布式锁。 应用ZooKeeper Q&#xff1a;什么是分布式锁 首先了解一下&…

云原生向量计算引擎 PieCloudVector:为大模型提供独特记忆

拓数派大模型数据计算系统&#xff08;PieDataComputingSystem&#xff0c;缩写&#xff1a;πDataCS&#xff09;在10月24日程序员节「大模型数据计算系统」2023拓数派年度技术论坛正式发布。πDataCS 以云原生技术重构数据存储和计算&#xff0c;「一份存储&#xff0c;多引擎…

C# 基本桌面编程(二)

一、前言 本章为C# 基本桌面编程技术的第二节也是最后一节。前一节在下面这个链接 C# 基本桌面编程&#xff08;一&#xff09;https://blog.csdn.net/qq_71897293/article/details/135024535?spm1001.2014.3001.5502 二、控件布局 1 叠放顺序 在WPF当中布局&#xff0c;通…

华为配置OSPF与BFD联动示例

组网需求 如图1所示&#xff0c;SwitchA、SwitchB和SwitchC之间运行OSPF&#xff0c;SwitchA和SwitchB之间的交换机仅作透传功能。现在需要SwitchA和SwitchB能快速感应它们之间的链路状态&#xff0c;当链路SwitchA-SwitchB发生故障时&#xff0c;业务能快速切换到备份链路Swi…

极狐GitLab DevSecOps 之容器镜像安全扫描

容器镜像安全 现状 最近某银行遭受供应链攻击的事件传的沸沸扬扬&#xff0c;安全又双叒叕进入了人们的视野。安全确实是一个非常重要&#xff0c;但是又最容易被忽略的话题。但是现在到了一个不得不人人重视安全&#xff0c;人人为安全负责的时代。尤其以现在非常火爆的云原…

java设计模式-工厂方法模式

1.工厂方法(FactoryMethod)模式的定义 定义一个创建产品对象的工厂接口&#xff0c;将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。 2.工厂方法模式的主要优缺点 优点&#xff1a; 用户只需要知道具体工厂的名称…

智能优化算法应用:基于乌燕鸥算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于乌燕鸥算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于乌燕鸥算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.乌燕鸥算法4.实验参数设定5.算法结果6.参考文…

低代码企业级PMO项目管理系统,360度全景透视企业管理视角

在一个崇高的目标支持下&#xff0c;不停地工作&#xff0c;即使慢&#xff0c;也一定会获得成功。 爱因斯坦 ★ 前情概要&#xff1a; 企业级PMO项目管理业务是行业里相对成熟和规范的业务&#xff0c;拥有众多商业套件和标准产品。 然而随着企业数字化建设进入深水区&#…