Android笔记【snippet】
一、
6、Card及ConstraintLayout线性布局
//定义单独的机器人单独一行的卡片
@Composable
fun RobotCard(robot: Robot,navController:NavController){Card(modifier = Modifier.fillMaxWidth().wrapContentHeight().padding(5.dp),colors = CardDefaults.elevatedCardColors(contentColor = Color.Green, containerColor = Color.Blue),elevation = CardDefaults.elevatedCardElevation(defaultElevation = 3.dp)){ConstraintLayout(modifier= Modifier.fillMaxWidth()) {val (imageRef,nameRef,descRef) = remember{createRefs()}val vguideLine = createGuidelineFromStart(0.3f)val hguideLine = createGuidelineFromTop(0.4f)Image(modifier= Modifier.constrainAs(imageRef) {top.linkTo(parent.top)bottom.linkTo(parent.bottom)start.linkTo(parent.start)end.linkTo(vguideLine)}.clickable {
// val robotStr = Gson().toJson(robot)
// navController.na},painter = painterResource(id = robot.icon), contentDescription = robot.name )Text(modifier = Modifier.constrainAs(nameRef){top.linkTo(parent.top)bottom.linkTo(hguideLine)start.linkTo(vguideLine)end.linkTo(parent.end)},text = robot.name,fontSize = 18.sp)Text(modifier = Modifier.constrainAs(descRef){top.linkTo(hguideLine)bottom.linkTo(parent.bottom)start.linkTo(vguideLine)end.linkTo(parent.end)},text = robot.description,fontSize = 20.sp)}}
}
5、导航数组 新版
package com.example.uiapp.ui.screen
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.MoreVert
import androidx.compose.material3.BottomAppBar
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.NavigationBarItem
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import com.example.uiapp.ui.Component.MenuViews
import kotlinx.coroutines.launch@Composable
fun NavigationGraphScreen(navController: NavHostController) {NavHost(navController = navController, startDestination = "home") {composable(route = "home") {HomeScreen()}composable(route = "config") {ConfigScreen()}composable(route = "help") {HelpScreen()}}
}
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun MainScreen2() {val navController:NavHostController= rememberNavController()val stateHolder= rememberState()Scaffold (
// topBar ={
// TopAppBar(
// navigationIcon = {
// IconButton(onClick = {
// stateHolder.scope.launch {
// stateHolder.drawerState.open()
// }
// }) {
// Icon(stateHolder.currentScreen.value.icon, contentDescription = "${stateHolder.currentScreen.value.route}")
// }
// },
// title ={
// Text(stateHolder.currentScreen.value.title)
// },
// actions = {
// IconButton(onClick = {
// stateHolder.expanded.value=!stateHolder.expanded.value;
// }) {
// Icon(Icons.Default.MoreVert, contentDescription ="more" )
// MenuViews(stateHolder.expanded,stateHolder.currentScreen)
//
// }
// }
// )}
// ,bottomBar = {BottomAppBar {screens.forEach{NavigationBarItem(selected = navController.currentDestination?.route==it.route,onClick = {navController.navigate(it.route)},icon = {Icon(it.icon, contentDescription = "null")})}}}){Box(modifier = Modifier.padding(it)){NavigationGraphScreen(navController)}}
}
不过这个只有底部导航栏
4、导航控件 旧版
代码于Day02test03
@Preview
@Composable
fun MainScreen(){
// val currentScreen:MutableState<Screen> = remember { mutableStateOf(Screen.Homepage) }
// //细节,在这里currentScreen后面写上这个类型代表也可以是其他页面
// val expanded = remember { mutableStateOf(false) }
// val drawerState= rememberDrawerState(initialValue = DrawerValue.Closed)
// val scope= rememberCoroutineScope()val stateHolder= rememberState()Scaffold(topBar={TopViews(stateHolder)},bottomBar={BottomViews(stateHolder.currentScreen)},floatingActionButton = {FloatingViews(stateHolder)},snackbarHost = {}) {Box(modifier = Modifier.padding(it)){//currentScreen.value.loadScreen.invoke()DrawViews(stateHolder.drawerState,currentScreen=stateHolder.currentScreen)}}
}
@Composable
@OptIn(ExperimentalMaterial3Api::class)
fun TopViews(stateHolder: StateHolder){TopAppBar(navigationIcon = {IconButton(onClick = {stateHolder.scope.launch {stateHolder.drawerState.open()}}) {Icon(stateHolder.currentScreen.value.icon, contentDescription = "${stateHolder.currentScreen.value.route}")}},title ={Text(stateHolder.currentScreen.value.title)},actions = {IconButton(onClick = {stateHolder.expanded.value=!stateHolder.expanded.value;}) {Icon(Icons.Default.MoreVert, contentDescription ="more" )MenuViews(stateHolder.expanded,stateHolder.currentScreen)}})
}
@Composable
fun BottomViews(currentScreen:MutableState<Screen>){BottomAppBar {screens.forEach{NavigationBarItem(selected = currentScreen.value==it,label = {Text(it.title, fontSize = 20.sp)},onClick = {currentScreen.value=it}, icon = {Icon(it.icon, contentDescription = "${it.route}")})}}}
@Composable
fun FloatingViews(stateHolder: StateHolder){FloatingActionButton(modifier = Modifier.clip(CircleShape),containerColor = Color.White,onClick = {stateHolder.currentScreen.value= Screen.Homepage}) {//tintIcon(Icons.Default.Home, contentDescription = "home")}
}
@Composable
fun DrawViews(drawerState: DrawerState, currentScreen: MutableState<Screen>){ModalNavigationDrawer(drawerState = drawerState,drawerContent = {Column (modifier = Modifier.width(300.dp).fillMaxHeight().background(Color.Black)){DrawerHead()DrawerBottom(drawerState,currentScreen)}}) {currentScreen.value.loadScreen()}
}
@Preview
@Composable
fun DrawerHead(){ConstraintLayout(modifier = Modifier.width(300.dp).height(200.dp).background(Color.Green)){val (imageRef,titleRef,contentRef)= remember { createRefs()}createVerticalChain(titleRef,contentRef, chainStyle = ChainStyle.Spread)val hGuideLine = createGuidelineFromStart(0.2f)val vGuideLine = createGuidelineFromTop(0.5f)Image(painter = painterResource(id=android.R.mipmap.sym_def_app_icon),contentDescription = "image", modifier = Modifier.constrainAs(imageRef){top.linkTo(parent.top)bottom.linkTo(parent.bottom)start.linkTo(parent.start)end.linkTo(hGuideLine)})Text("客人", fontSize = 20.sp, modifier = Modifier.constrainAs(titleRef){top.linkTo(parent.top)bottom.linkTo(vGuideLine)start.linkTo(hGuideLine)end.linkTo(parent.end)})Text(text = "这个人很懒",fontSize = 18.sp,modifier = Modifier.constrainAs(contentRef) {top.linkTo(vGuideLine)bottom.linkTo(parent.bottom)start.linkTo(hGuideLine)end.linkTo(parent.end)})}}@Composable
fun DrawerBottom(drawerState: DrawerState,currentScreen:MutableState<Screen>){val scope= rememberCoroutineScope()Column(modifier = Modifier.width((300.dp))) {screens.forEach{NavigationDrawerItem(colors = NavigationDrawerItemDefaults.colors(selectedIconColor = Color.Red,unselectedIconColor = Color.White,selectedTextColor = Color.Red,unselectedTextColor = Color.White,selectedBadgeColor = Color.DarkGray,unselectedBadgeColor = Color.Black),icon={Icon(it.icon, contentDescription = it.route)},label = {Text(it.title, fontSize = 24.sp)},selected = it==currentScreen.value,onClick = {currentScreen.value=itscope.launch{drawerState.close()}})}}}
3、序列化数据初始化
data class Student(val id:String,val name:String,val gender:String,val email:String): Parcelable {constructor(parcel: Parcel) : this(parcel.readString()!!,parcel.readString()!!,parcel.readString()!!,parcel.readString()!!) {}override fun writeToParcel(p0: Parcel, p1: Int) {p0.writeString(id)p0.writeString(name)p0.writeString(gender)p0.writeString(email)}override fun describeContents(): Int =0companion object CREATOR : Parcelable.Creator<Student> {override fun createFromParcel(parcel: Parcel): Student {return Student(parcel)}override fun newArray(size: Int): Array<Student?> {return arrayOfNulls(size)}}
}
利用Parcelable,也可以参考Android笔记【18】关于数据传输的三份代码,里面记录了不同方法的使用,但对于这份只是放了代码,后续会有更多深读。
它写好参数继承接口之后写好构造器writeToParcel后,会自动报错生成实现后面的抽象函数和伴随对象。
2、Column、Row、Image最基本的修饰
Column(modifier = Modifier.fillMaxSize(), // 使 Column 填满整个可用空间verticalArrangement = Arrangement.spacedBy(8.dp), // 子组件之间的垂直间距horizontalAlignment = Alignment.CenterHorizontally // 子组件的水平对齐方式) {Text("Item 1")Text("Item 2")Text("Item 3")}
Row(
modifier = Modifier
.fillMaxWidth()
.padding(60.dp), // 给 Row 添加内边距
verticalAlignment = Alignment.CenterVertically, // 垂直居中对齐
horizontalArrangement = Arrangement.SpaceBetween // 子组件之间的水平间距
) {Text(text = "Item 1")Button(onClick = { /* 处理点击事件 */ }) {Text("Button 1")}Text(text = "Item 2")Button(onClick = { /* 处理点击事件 */ }) {Text("Button 2")}
}
区别:
-
Arrangement.SpaceBetween:
- 子元素的第一个和最后一个元素与容器的边缘对齐。
- 子元素之间的空间被均匀分配,但容器的两端没有额外的空间。
- 例如,如果有三个元素,空间只分配在它们之间。
-
Arrangement.SpaceEvenly:
- 所有子元素之间的空间是均匀的,包括容器的边缘。
- 第一个和最后一个元素与容器边缘之间的空间与元素之间的空间相等。
- 例如,如果有三个元素,容器的两端也会有与子元素之间相同的间距。
Row(modifier = Modifier.padding(all = 8.dp)) {Image(painter = painterResource(R.drawable.profile_picture),contentDescription = null,modifier = Modifier.size(40.dp).clip(CircleShape).border(1.5.dp, MaterialTheme.colorScheme.primary, CircleShape))Spacer(modifier = Modifier.width(8.dp))
}
// We toggle the isExpanded variable when we click on this Column
Column(modifier = Modifier.clickable { isExpanded = !isExpanded }) {Text(text = msg.author,color = MaterialTheme.colorScheme.secondary,style = MaterialTheme.typography.titleSmall)Spacer(modifier = Modifier.height(4.dp))Surface(shape = MaterialTheme.shapes.medium,shadowElevation = 1.dp,) {Text(text = msg.body,modifier = Modifier.padding(all = 4.dp),// If the message is expanded, we display all its content// otherwise we only display the first linemaxLines = if (isExpanded) Int.MAX_VALUE else 1,style = MaterialTheme.typography.bodyMedium)}
}
用那个:
var isExpanded by remember { mutableStateOf(false) }
Android笔记【1】这里面讲了
val state by remember { mutableStateOf(默认值) }
这种方式使用了 Kotlin 的委托属性(delegated properties)。这里的 state 是一个 Int 类型的可读写属性,直接代表 mutableStateOf 的值。你可以直接使用 state 进行读写,而无需使用 .value。
1、debug页面切换Log
open class BaseActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)makeLog("${this.localClassName}-->onCreate")}override fun onStart() {super.onStart()makeLog("${this.localClassName}-->onStart")}override fun onResume() {super.onResume()makeLog("${this.localClassName}-->onResume")}override fun onPause() {super.onPause()makeLog("${this.localClassName}-->onPause")}override fun onStop() {super.onStop()makeLog("${this.localClassName}-->onStop")}override fun onDestroy() {super.onDestroy()makeLog("${this.localClassName}-->onDestroy")}private fun makeLog(log:String){Log.d("TAG",log)}
}
注意:那这样其他页面就不是继承componentActivity了,而是继承BaseActivity哈~
DownLoad 音乐播放器
music里面放骰子
Day01在Practice里面 (05_06withcontext自写音乐播放器)(app彩票生成器)( lifecycledemo跳转)(serializable 数据传递)
Day02(uiapp页面跳转草稿 ,day04test02重写,xinlitest草稿)
Day03 RobotCard
Day04(test02 parceble数据传输、页面跳转)(test03执行后退)(Looper test04) (test05test06货币转换)
Day05 聊天机器人
Day07contentProvider room mirgrate(书上有三种迁移,我的代码没完全)work1(坏了)
Day06GoogleUI
Day08两种weChat版本
Day09chat+room test03可以做到 贝儿的综合体世界
day10
DL 1 FakeWe-Chat Master 可以运行啦 打算做一个持久化 没做成功
project123 做一个线上购物软件,但获取不到fireBase里面的数据。。。
DL FakeWe-Chat Master 可以运行 改了搜索框
相关文章:

Android笔记【snippet】
一、 6、Card及ConstraintLayout线性布局 //定义单独的机器人单独一行的卡片 Composable fun RobotCard(robot: Robot,navController:NavController){Card(modifier Modifier.fillMaxWidth().wrapContentHeight().padding(5.dp),colors CardDefaults.elevatedCardColors(co…...

zsh: command not found: conda
场景描述 在 Linux 服务器上使用 zsh 时,如果出现 zsh: command not found: conda 错误,说明你的系统未正确配置 conda 命令,或者你尚未安装 Anaconda/Miniconda。 解决方案 确保已安装 Anaconda 或 Miniconda conda 是 Anaconda 或 Minico…...

【知识科普】CPU,GPN,NPU知识普及
CPU,GPU,NPU CPU、GPU、NPU 详解1. CPU(中央处理器)2. GPU(图形处理器)3. NPU(神经网络处理器) **三者的核心区别****协同工作示例****总结** CPU、GPU、NPU 详解 1. CPU(中央处理器࿰…...

【C++八股】struct和Class的区别
1. 默认访问控制 struct:结构体中的成员默认是 public,即外部代码可以直接访问结构体的成员。class:类中的成员默认是 private,即外部代码不能直接访问类的成员,必须通过公有接口(通常是成员函数ÿ…...

鹧鸪云光伏仓储、物料管理软件详细功能
采购中心 :作为核心枢纽,能集中管理多品牌设备,企业可灵活按需采购。采购与退货流程高效便捷,审核通过后物资快速补充、问题货物及时退回,保障资金与物资顺畅周转,避免积压浪费。付款与退款环节 ࿱…...

bazel 小白理解
Bazel命令是用于构建和测试软件项目的一个强大工具,尤其适用于大规模和多语言的软件项目。对于小白来说,可以这样理解Bazel及其命令: Bazel的基本概念 构建系统:Bazel是一个构建系统,它的主要任务是自动化地编译和链…...

MVC(Model-View-Controller)framework using Python ,Tkinter and SQLite
1.项目结构 sql: CREATE TABLE IF NOT EXISTS School (SchoolId TEXT not null, SchoolName TEXT NOT NULL,SchoolTelNo TEXT NOT NULL) 整体思路 Model:负责与 SQLite 数据库进行交互,包括创建表、插入、删除、更新和查询数据等操作。View࿱…...

WPF 设置宽度为 父容器 宽度的一半
方法1:使用 绑定和转换器 实现 创建类文件 HalfWidthConverter public class HalfWidthConverter : IValueConverter{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){if (value is double width){return width / 4…...

java项目之在线心理评测与咨询管理系统(源码+文档)
项目简介 在线心理评测与咨询管理系统实现了以下功能: 在线心理评测与咨询管理系统的主要使用者分为: (1)在个人中心,管理员可以修改自己的用户名和登录密码。 (2)在系统前台可以查看首页&…...

【STM32系列】利用MATLAB配合ARM-DSP库设计FIR数字滤波器(保姆级教程)
ps.源码放在最后面 设计IIR数字滤波器可以看这里:利用MATLAB配合ARM-DSP库设计IIR数字滤波器(保姆级教程) 前言 本篇文章将介绍如何利用MATLAB与STM32的ARM-DSP库相结合,简明易懂地实现FIR低通滤波器的设计与应用。文章重点不在…...

Springboot框架扩展功能的使用
Spring Boot 提供了许多扩展点,允许开发者在应用程序的生命周期中插入自定义逻辑。这些扩展点可以帮助你更好地控制应用程序的行为,例如在启动时初始化数据、在关闭时释放资源、或者自定义配置加载逻辑。以下是 Spring Boot 中常见的扩展点: …...

yum报错 Could not resolve host: mirrorlist.centos.org
检查dns 使用ping www.baidu.com ,如果ping不通,检查/etc/resolv.conf文件中是否有: nameserver 8.8.8.8 nameserver 8.8.4.4 替换yum源 1.备份原始的 YUM 源配置文件: sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.r…...

docker使用dockerfile打包镜像(docker如何打包)
文章目录 1. 编写 Dockerfile2. 构建 Docker 镜像3. 运行 Docker 容器4. 导出与导入镜像(可选) 1. 编写 Dockerfile Dockerfile 是一个文本文件,其中包含了一系列指令,这些指令定义了如何构建你的 Docker 镜像。下面以一个简单的…...

去中心化AGI网络架构:下一代人工智能的范式革命
文章目录 引言:当AGI遇到去中心化一、中心化AI架构的四大困境1.1 算力垄断与资源错配1.2 数据孤岛与隐私悖论1.3 模型暴政与单点故障1.4 创新抑制与价值捕获二、去中心化AGI网络的架构设计2.1 分层架构总览2.2 网络层:混合拓扑结构2.3 计算层:动态算力编排2.4 数据层:零知识…...

gitlab无法登录问题
在我第一次安装gitlab的时候发现登录页面是 正常的页面应该是 这种情况的主要原因是不是第一次登录,所以我们要找到原先的密码 解决方式: [rootgitlab ~]# vim /etc/gitlab/initial_root_password# WARNING: This value is valid only in the followin…...

单向链表在实际项目中的应用
前言 在实际项目中,单向链表经常被用来解决排队问题,因为链表允许动态地添加和移除元素,非常适合模拟队列(FIFO,先进先出)的行为。 这里的链表包含头节点,头结点的数据用来记录链表长度&#x…...

【系统架构设计师】操作系统 ③ ( 存储管理 | 页式存储弊端 - 段式存储引入 | 段式存储 | 段表 | 段表结构 | 逻辑地址 的 合法段地址判断 )
文章目录 一、页式存储弊端 - 段式存储引入1、页式存储弊端 - 内存碎片2、页式存储弊端 - 逻辑结构不匹配3、段式存储引入 二、段式存储 简介1、段式存储2、段表3、段表 结构4、段内地址 / 段内偏移5、段式存储 优缺点6、段式存储 与 页式存储 对比 三、逻辑地址 的 合法段地址…...

PDF另存为图片的一个方法
说明 有时需要把PDF的每一页另存为图片。用Devexpress可以很方便的完成这个功能。 窗体上放置一个PdfViewer。 然后循环每一页 for (int i 1; i < pdfViewer1.PageCount; i) 调用 chg_pdf_to_bmp函数获得图片并保存 chg_pdf_to_bmp中调用了PdfViewer的CreateBitmap函数…...

HTML之JavaScript运算符
HTML之JavaScript运算符 1.算术运算符 - * / %除以0,结果为Infinity取余数,如果除数为0,结果为NaN NAN:Not A Number2.复合赋值运算符 - * / %/ 除以0,结果为Infinity% 如果除数为0,结果为NaN NaN:No…...

借助 ListWise 提升推荐系统精排效能:技术、案例与优化策略
目录 一、引言二、ListWise 方法概述三、ListWise 用于精排的优势四、ListWise 样本具体的构建过程4.1 确定样本的上下文4.2 收集候选物品及相关特征4.3 确定物品的真实排序标签4.4 构建样本列表4.5 划分训练集、验证集和测试集 五、ListWise 方法案例分析六、ListWise 方法在精…...

C++中什么时候用. 什么时候用->
学了一年C今天出了一个大岔子,因为太久没有做链表类型题目了,并且STL用惯了今天遇到一题,写的时候发现完全不对劲,搞慌了,首先我们看题目 2. 两数相加 再看我第一次的解答,先不论结果对不对 错的行为有很多…...

从云原生到 AI 原生,谈谈我经历的网关发展历程和趋势
作者:谢吉宝(唐三) 编者按: 云原生 API 网关系列教程即将推出,欢迎文末查看教程内容。本文整理自阿里云智能集团资深技术专家,云原生产品线中间件负责人谢吉宝(唐三) 在云栖大会的精…...

【Python深入浅出】Python3正则表达式:开启高效字符串处理大门
目录 一、正则表达式基础入门1.1 什么是正则表达式1.2 正则表达式的语法规则1.3 特殊字符与转义 二、Python 中的 re 模块2.1 re 模块概述2.2 常用函数与方法2.2.1 re.match()2.2.2 re.search()2.2.3 re.findall()2.2.4 re.sub() 2.3 修饰符(Flags)的使用…...

Vue.js Vue CLI 安装与使用
Vue.js Vue CLI 安装与使用 今天我们来聊聊 Vue CLI 的安装与使用。对于开发 Vue 应用来说,Vue CLI 是一个非常强大的工具,它能帮助你快速创建项目脚手架、配置开发环境、自动化构建流程,从而大大提高开发效率。下面我就和大家一步一步地讲解…...

科技的尽头:在有限与永恒的夹缝中寻找文明的真谛
当人类用燧石点燃第一簇文明之火时,科技发展的齿轮便已开始转动。这个从原始工具到量子计算机的进化历程,既是人类突破生物局限的史诗,也是文明不断自我解构与重构的哲学叙事。站在人工智能与基因编辑并行的时代节点,"科技尽…...

【牛客】动态规划专题一:斐波那契数列
文章目录 DP1 斐波那契数列法1:递归法2:动态规划法3:优化空间复杂度 2.分割连接字符串3. 给定一个字符串s和一组单词dict,在s中添加空格将s变成一个句子 DP1 斐波那契数列 法1:递归 // 递归 #include <iostream>…...

java8、9新特性
JAVA8 Lambda 表达式 (parameters) -> expression 或 (parameters) ->{ statements; } 提供了一种更为简洁的语法,尤其适用于函数式接口。相比于传统的匿名内部类,Lambda 表达式使得代码更为紧凑,减少了样板代码的编写。 它允许将函…...

作业:zuoye
1.闹钟(错的) #include "widget.h" #include "ui_widget.h" #include <QMessageBox>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);// 初始化定时器objTimer new QTimer(th…...

redis底层数据结构——链表
文章目录 定义内部实现总结 定义 链表提供了高效的节点重排能力,以及顺序性的节点访间方式,并且可以通过增删节点来灵活地调整链表的长度。 作为一种常用数据结构,链表内置在很多高级的编程语言里面,因为Redis使用的C语言并没有…...

问题解决 4S 法
在深入研读《像高手一样解决问题》的第二章后,犹如打开了一扇通往高效问题解决领域的新大门,其中所阐述的问题解决 4S 法,更是给人以拨云见日之感。 一、陈述(State):明确问题本质 这是问题解决的起始点&…...