Android笔记【snippet】

目录

一、

6、Card及ConstraintLayout线性布局

5、导航数组 新版

4、导航控件 旧版

3、序列化数据初始化

2、Column、Row、Image最基本的修饰

1、debug页面切换Log


一、

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  可以运行 改了搜索框

     

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

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

相关文章

jupyter notebook中3种读图片的方法_与_图片翻转(上下翻转,左右翻转,上下左右翻转)

已有图片cat.jpg 相对于代码的位置&#xff0c;可以用./cat.jpg进行读取。 下面是3种读图片的方法。 1.python读图片-pillow 图片文件不适合用open去读取 用open读图片&#xff0c;易引发UnicodeDecodeError: gbk codec cant decode byte 0xff in position 0: illegal multib…

文理医院预约挂号系统的设计与实现(代码+数据库+LW)

摘要 近年来&#xff0c;信息化管理行业的不断兴起&#xff0c;使得人们的日常生活越来越离不开计算机和互联网技术。首先&#xff0c;根据收集到的用户需求分析&#xff0c;对设计系统有一个初步的认识与了解&#xff0c;确定文理医院预约挂号系统的总体功能模块。然后&#…

从MySQL优化到脑力健康:技术人与效率的双重提升

文章目录 零&#xff1a;前言一&#xff1a;MySQL性能优化的核心知识点1. 索引优化的最佳实践实战案例&#xff1a; 2. 高并发事务的处理机制实战案例&#xff1a; 3. 查询性能调优实战案例&#xff1a; 4. 缓存与连接池的优化实战案例&#xff1a; 二&#xff1a;技术工作者的…

本地部署DeepSeek R1 + 界面可视化open-webui

本地部署DeepSeek R1 界面可视化open-webui ollama是物理机本地安装 open-webui是容器启动 另外&#xff0c;用docker 部署ollama也很方便ollama docker 安裝部署ollama ollama官网 安装 Linux上安装: curl -fsSL https://ollama.com/install.sh | sh使用命令行管理 拉…

Oracle常用导元数据方法

1 说明 前两天领导发邮件要求导出O库一批表和索引的ddl语句做国产化测试&#xff0c;涉及6个系统&#xff0c;6千多张表&#xff0c;还好涉及的用户并不多&#xff0c;要不然很麻烦。 如此大费周折原因&#xff0c;是某国产库无法做元数据迁移。。。额&#xff0c;只能我手动导…

win32汇编环境,对线程的创建与操作示例二

;运行效果 ;win32汇编环境,对线程的创建与操作示例二 ;本文主要是实现用CreateThread创建线程时,如何把参数传入进去 ;以下举3个例子说明,如何把数值、字符串和自定义结构传入线程之中 ;下面为asm文件 ;>>>>>>>>>>>>>>>>>…

【Obsidian】当笔记接入AI,Copilot插件推荐

当笔记接入AI&#xff0c;Copilot插件推荐 自己的知识库笔记如果增加AI功能会怎样&#xff1f;AI的回答完全基于你自己的知识库余料&#xff0c;是不是很有趣。在插件库中有Copilot插件这款插件&#xff0c;可以实现这个梦想。 一、什么是Copilot&#xff1f; 我们知道githu…

【DeepSeek】deepseek可视化部署

目录 1 -> 前文 2 -> 部署可视化界面 1 -> 前文 【DeepSeek】DeepSeek概述 | 本地部署deepseek 通过前文可以将deepseek部署到本地使用&#xff0c;可是每次都需要winR输入cmd调出命令行进入到命令模式&#xff0c;输入命令ollama run deepseek-r1:latest。体验很…

html为<td>添加标注文本

样式说明&#xff1a; /*为td添加相对定位点*/ .td_text {position: relative; }/*为p添加绝对坐标(相对于父元素中的定位点)*/ .td_text p {position: absolute;top: 80%;font-size: 8px; }参考资料&#xff1a;

操作系统常见调度算法的详细介绍

目录 1. 先进先出算法&#xff08;FIFO&#xff09; 2. 前后台调度算法 3. 最短处理机运行期优先调度算法&#xff08;短进程优先算法&#xff09; 4. 最高响应比优先调度算法&#xff08;HRRN&#xff09; 5. 优先级调度算法 6. 时间片轮转调度算法 7. 多级反馈队列轮转…

(定时器,绘制事件,qt简单服务器的搭建)2025.2.11

作业 笔记&#xff08;复习补充&#xff09; 1> 制作一个闹钟软件 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPushButton> //按钮类 #include <QTimer> //定时器类 #include <QTime> //…

评估多智能体协作网络(MACNET)的性能:COT和AUTOGPT基线方法

评估多智能体协作网络(MACNET)的性能 方法选择:选择COT(思维链,Chain of Thought)、AUTOGPT等作为基线方法。 COT是一种通过在推理过程中生成中间推理步骤,来增强语言模型推理能力的方法,能让模型更好地处理复杂问题,比如在数学问题求解中,展示解题步骤。 AUTOGPT则是…

5-R循环

R 循环 ​ 有的时候&#xff0c;我们可能需要多次执行同一块代码。一般情况下&#xff0c;语句是按顺序执行的&#xff1a;函数中的第一个语句先执行&#xff0c;接着是第二个语句&#xff0c;依此类推。 编程语言提供了更为复杂执行路径的多种控制结构。 循环语句允许我们多…

用Python编写经典《贪吃蛇》小游戏

文章目录 环境准备依赖库 实现思路核心模块设计 代码框架运行效果优化建议总结通过本框架可实现基础版贪吃蛇游戏&#xff0c;关键点在于&#xff1a;典型问题解决方案&#xff1a; 环境准备 依赖库 主要依赖 Python 3.6pygame 2.1.2 # 用于图形界面渲染 安装命令 pip ins…

IDEA接入DeepSeek

IDEA 目前有多个途径可以接入deepseek&#xff0c;比如CodeGPT或者Continue&#xff0c;这里借助CodeGPT插件接入&#xff0c;CodeGPT目前用的人最多&#xff0c;相对更稳定 一、安装 1.安装CodeGPT idea插件市场找到CodeGPT并安装 2.创建API Key 进入deepseek官网&#xf…

aspectFill(填充目标区域的同时保持图像的原有宽高比 (aspect ratio)图像不会被拉伸或压缩变形

“aspectFill” 是一个常用于图像和视频处理的术语&#xff0c;尤其是在用户界面 (UI) 设计和图形编程领域。它描述的是一种图像缩放或调整大小的方式&#xff0c;旨在填充目标区域的同时保持图像的原有宽高比 (aspect ratio)。 更详细的解释: Aspect Ratio (宽高比): 指的是图…

在 Windows 系统中如何快速进入安全模式的两种方法

在使用电脑的过程中&#xff0c;有时我们可能会遇到一些需要进入“安全模式”来解决的问题。安全模式是一种特殊的启动选项&#xff0c;它以最小化配置启动操作系统&#xff0c;仅加载最基本的驱动程序和服务&#xff0c;从而帮助用户诊断和修复系统问题。本文中简鹿办公将详细…

CNN-LSTM卷积神经网络长短期记忆神经网络多变量多步预测,光伏功率预测

CNN-LSTM卷积神经网络长短期记忆神经网络多变量多步预测&#xff0c;光伏功率预测 一、引言 1.1、研究背景和意义 光伏发电作为一种清洁能源&#xff0c;对于实现能源转型和应对气候变化具有重要意义。然而&#xff0c;光伏发电的输出功率具有很强的间歇性和波动性&#xff…

Matlab工具包安装

一&#xff0c;直接下载源码并配置方式 tensortoolbox地址&#xff1a;https://www.tensortoolbox.org/ 参考地址&#xff1a;https://blog.csdn.net/qq_37637914/article/details/116016157 二&#xff0c;从官方商店下载-需要登录

单片机之基本元器件的工作原理

一、二极管 二极管的工作原理 二极管是一种由P型半导体和N型半导体结合形成的PN结器件&#xff0c;具有单向导电性。 1. PN结形成 P型半导体&#xff1a;掺入三价元素&#xff0c;形成空穴作为多数载流子。N型半导体&#xff1a;掺入五价元素&#xff0c;形成自由电子作为多…