AndroidStudio-常见界面控件

一、Button

package com.example.review01import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.TextViewclass Review01Activity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_review01)val button = findViewById<Button>(R.id.btn_01)button.setOnClickListener{button.text = "按钮被点击"}}
}

另一种实现方法:

package com.example.review01import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.TextViewclass Review01Activity : AppCompatActivity(), View.OnClickListener {lateinit var button: Buttonoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_review01)button = findViewById(R.id.btn_01)button.setOnClickListener(this)}override fun onClick(v: View?) {if(v != null){when (v.id) {R.id.btn_01 -> {button.text = "按钮被点击"}else -> {}}}}
}

二、EditView

<?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:layout_width="match_parent"android:layout_height="match_parent"tools:context=".Review03Activity"><EditTextandroid:id="@+id/edit_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="请输入账号"android:textSize="17sp"app:layout_constraintTop_toTopOf="parent"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"tools:ignore="MissingConstraints" /><EditTextandroid:id="@+id/edit_password"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="请输入密码"android:inputType="numberPassword"android:textSize="17sp"app:layout_constraintTop_toBottomOf="@+id/edit_name"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"tools:ignore="MissingConstraints" /></androidx.constraintlayout.widget.ConstraintLayout>
package com.example.review01import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.EditTextclass Review03Activity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_review03)val edit_name = findViewById<EditText>(R.id.edit_name)edit_name.text}
}

三、ImageView

<?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:layout_width="match_parent"android:layout_height="match_parent"tools:context=".Review04Activity"><ImageViewandroid:layout_width="wrap_content"android:layout_height="match_parent"android:src="@drawable/sgqt01"app:layout_constraintTop_toTopOf="parent"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"/></androidx.constraintlayout.widget.ConstraintLayout>

四、RadioButton

<?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:layout_width="match_parent"android:layout_height="match_parent"tools:context=".Review05Activity"><RadioGroupandroid:id="@+id/rbtn_group"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_constraintTop_toTopOf="parent"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"tools:ignore="MissingConstraints"><RadioButtonandroid:id="@+id/rbtn_01"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="男"/><RadioButtonandroid:id="@+id/rbtn_02"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="女"/></RadioGroup></androidx.constraintlayout.widget.ConstraintLayout>
package com.example.review01import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.RadioButtonclass Review05Activity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_review05)val rbtn_1 = findViewById<RadioButton>(R.id.rbtn_01)rbtn_1.setOnCheckedChangeListener { compoundButton,b ->println(compoundButton.id)println(R.id.rbtn_01)println(b)}}
}

五、CheckBox

<?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"><TextViewandroid:id="@+id/tv_cb"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="请选择你的兴趣爱好"/><CheckBoxandroid:id="@+id/cb_01"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="舞蹈"/><CheckBoxandroid:id="@+id/cb_02"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="表演"/><CheckBoxandroid:id="@+id/cb_03"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="音乐"/></LinearLayout>
package com.example.review01import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.CheckBox
import android.widget.TextViewclass Review07Activity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_review07)val cb_1 = findViewById<CheckBox>(R.id.cb_01);val cb_2 = findViewById<CheckBox>(R.id.cb_02);val cb_3 = findViewById<CheckBox>(R.id.cb_03);val textView = findViewById<TextView>(R.id.tv_cb)cb_1.setOnCheckedChangeListener { compoundButton, b ->if (b) textView.text = "你选择了${compoundButton.text}"}cb_2.setOnCheckedChangeListener { compoundButton, b ->if (b) textView.text = "你选择了${compoundButton.text}"}cb_3.setOnCheckedChangeListener { compoundButton, b ->if (b) textView.text = "你选择了${compoundButton.text}"}}
}

六、Toast

安卓中的Toast是一种简单的用户界面提示工具,用于在屏幕上显示短暂的消息。它通常用于向用户显示一些短暂的信息,比如操作成功、警告或者错误提示。Toast消息会以浮动窗口的形式出现在屏幕上方或下方,持续一段时间后自动消失,不会打断用户的操作。Toast通常用于在应用程序中提供一种简单的反馈机制。

<?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"><TextViewandroid:id="@+id/tv_cb"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="请选择你的兴趣爱好"/><CheckBoxandroid:id="@+id/cb_01"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="舞蹈"/><CheckBoxandroid:id="@+id/cb_02"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="表演"/><CheckBoxandroid:id="@+id/cb_03"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="音乐"/></LinearLayout>
package com.example.review01import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.CheckBox
import android.widget.TextView
import android.widget.Toastclass Review08Activity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_review08)val cb_1 = findViewById<CheckBox>(R.id.cb_01)val cb_2 = findViewById<CheckBox>(R.id.cb_02)val cb_3 = findViewById<CheckBox>(R.id.cb_03)val textView = findViewById<TextView>(R.id.tv_cb)cb_1.setOnCheckedChangeListener { compoundButton, b ->if(b)Toast.makeText(this,compoundButton.text,Toast.LENGTH_SHORT).show()}}
}

七、AlertDialog

1.普通对话框

安卓中的AlertDialog是一个常用的对话框组件,用于在应用程序中浮动显示一些信息、进行简单的交互或者请求用户确认某些操作。它通常包含一个图标和标题、一个消息内容和一些按钮选项,比如确认、取消等。开发者可以使用AlertDialog来向用户展示信息,例如警告、错误提示或者确认对话框等。

package com.example.review01import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.activity.OnBackPressedCallback
import androidx.appcompat.app.AlertDialogclass Review09Activity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_review09)val backPressedDispatcher = this.onBackPressedDispatcher//创建一个onBackPressedCallbackval callback = object :OnBackPressedCallback(true){override fun handleOnBackPressed() {//创建AlterDialog.Builder 实例runOnUiThread {val builder = AlertDialog.Builder(this@Review09Activity)//设置对话框标题和消息builder.setTitle("普通对话框").setMessage("是否退出应用?").setPositiveButton("确定") { dialog, which ->dialog.dismiss()this@Review09Activity.finish()}.setNegativeButton("取消"){dialog,which ->dialog.dismiss()}//创建并显示AlterDialogval dialog = builder.create()dialog.show()}}}//将OnBackPressedCallback添加到OnBackPressedDispatcherbackPressedDispatcher.addCallback(callback)}
}

应该是显示这样一个对话框但是我的没有显示。。。

2.单选对话框

单选对话框提供单选项目,如下所示,点击单选框后修改字体大小

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".Review10Activity"><TextViewandroid:id="@+id/tv_dialog"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World"app:layout_constraintTop_toTopOf="parent"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"tools:ignore="MissingConstraints" /><Buttonandroid:id="@+id/btn_dialog"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="按钮"android:textSize="17sp"app:layout_constraintTop_toBottomOf="@+id/tv_dialog"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"tools:ignore="MissingConstraints" /></androidx.constraintlayout.widget.ConstraintLayout>
package com.example.review01import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import androidx.appcompat.app.AlertDialogclass Review10Activity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_review10)val btn = findViewById<Button>(R.id.btn_dialog)val tv = findViewById<TextView>(R.id.tv_dialog)btn.setOnClickListener {val builder = AlertDialog.Builder(this)val items = arrayOf("小号","中号","大号")builder.setTitle("单选对话框").setSingleChoiceItems(items,-1) { dialog,which ->btn.textSize = (which + 1) * 15ftv.textSize = (which + 1) * 15fdialog.dismiss() //关闭对话框}val dialog = builder.create()dialog.show()}}
}

builder.setSingleChoiceItems 用于设置一个单选列表,用户可以从中选择一个项。第一个参数是列表项,第二个参数是默认选中的项(这里是 -1,表示没有默认选中任何项),第三个参数是选择项时的监听器。

在回调函数中,我们根据选中的项 which 设置按钮和文本视图的字体大小,计算公式是 (which + 1) * 15f。这样,选择第一个选项时字体大小是 15f,第二个是 30f,第三个是 45f

dialog.dismiss() 会关闭对话框。

3.复选对话框

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".Review10Activity"><TextViewandroid:id="@+id/tv_dialog"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World"app:layout_constraintTop_toTopOf="parent"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"tools:ignore="MissingConstraints" /><Buttonandroid:id="@+id/btn_dialog"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="按钮"android:textSize="17sp"app:layout_constraintTop_toBottomOf="@+id/tv_dialog"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"tools:ignore="MissingConstraints" /></androidx.constraintlayout.widget.ConstraintLayout>
package com.example.review01import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import androidx.appcompat.app.AlertDialogclass Review12Activity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_review12)val btn = findViewById<Button>(R.id.btn_dialog)val tv = findViewById<TextView>(R.id.tv_dialog)btn.setOnClickListener {val builder = AlertDialog.Builder(this)val items = arrayOf("阅读","唱歌","跳舞","戏曲")val checkedItems = booleanArrayOf(false,false,false,false)builder.setTitle("复选对话框").setMultiChoiceItems(items,checkedItems){ dialog,which,isChecked ->checkedItems[which] = isChecked}.setPositiveButton("确定") { dialog,which ->var hobby = "您的爱好是:"for (i in items.indices){if (checkedItems[i]) {hobby += items[i] + " "}}tv.text = hobbydialog.dismiss()}val dialog = builder.create()dialog.show()}}
}

八、ListView

安卓中的ListView是一种常用的UI组件,用于在应用中展示可滚动的列表数据,允许用户通过滑动屏幕来查看列表中的项目,并且可以在列表中显示复杂的数据。ListView可以以垂直或水平方向滚动,并且可以自定义每个列表项的外观和行为。 通常,ListView与Adapter结合使用,Adapter负责将数据绑定到ListView上,以便正确显示列表项。 在较新的安卓开发中,RecyclerView通常被认为是更灵活和性能更好的选择,尤其是在处理大量数据或需要更复杂布局的情况下。

ListView必须通过适配器才能添加数据,适配器是ListView和数据之前的桥梁。这么做的目的是为了能够实现视图和数据的分离。有三种常用的Adapter:

1.BaseAdapter

一个抽象类,需要自定义一个子类来实现它,并实现一系列抽象方法来定义数据源和列表项的展示逻辑:

getCount(): 返回适配器中数据项的总数

getItem(int position): 返回指定位置的数据项

getItemId(int position): 返回指定位置的数据项的唯一标识符

getView(int position, View convertView, ViewGroup parent): 创建或获取指定位置的列表项视图。用于将数据绑定到视图上,并返回给列表进行显示。

2、3.SimpleAdapter和ArrayAdapter:

SimpleAdapter相对较为简单,适用于简单的列表数据展示,但对于复杂的列表项布局和交互较难满足。ArrayAdapter更灵活,可以直接将数组或List中的数据绑定到ListView,更方便地控制列表项的显示和交互。

SimpleAdapter适用于将不同类型的数据以键值对的形式展示在ListView中,例如将文本、图像等混合展示在列表项中。ArrayAdapter适用于将单一类型的数据集合(例如字符串、对象等)展示在ListView中。

以ArrayAdapter为例,展示如何通过其连接数据和ListView:                                                           1)确定要展示的数据,即stringList                                                                                               2)通过数据、adapter中每个项目的视图、上下文创建Adapter对象

注: ArrayAdapter默认使用的布局文件是系统提供的简单列表项布局 android.R.layout.simple_list_item_1,只包含一个 TextView 用于显示文本。如果需要展示复杂的效果,需要自行编写xml布局文件。

<?xml version="1.0" encoding="utf-8"?>
<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=".Review13Activity"><ListViewandroid:id="@+id/lv"android:layout_width="match_parent"android:layout_height="match_parent"android:listSelector="#fefefe"android:scrollbars="none"/></LinearLayout>
package com.example.review01import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.ListViewclass Review13Activity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_review13)val lv = findViewById<ListView>(R.id.lv)//创建一个字符串列表val stringList = listOf("蒋敦豪","鹭卓","李耕耘","李昊","赵一博","卓沅","赵小童","何浩楠","陈少熙","王一珩")//创建ArrayAdapter将字符串列表与ListView相连接val adapter = ArrayAdapter(this,android.R.layout.simple_list_item_1,stringList)lv.adapter = adapter}
}

九、RecyclerView

RecyclerView是安卓中用于展示大量数据的高性能列表控件,是ListView的升级版。相比于ListView,RecyclerView更加灵活、高效,提供了更多的定制和扩展功能。

灵活的布局管理器(LayoutManager):RecyclerView允许开发者使用不同的布局管理器来控制列表项的排列方式,例如垂直列表、水平列表、网格布局等,这使得RecyclerView适用于各种不同的布局需求。

ViewHolder模式:RecyclerView使用了ViewHolder模式来重用列表项视图,这样可以大大提高列表性能,避免频繁创建和销毁视图。

局部刷新:RecyclerView支持局部刷新,可以针对列表中的某一项或某几项进行刷新,而不需要刷新整个列表,提高了刷新效率。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".Review14Activity"><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/lv"android:layout_width="match_parent"android:layout_height="match_parent"/></androidx.constraintlayout.widget.ConstraintLayout>
package com.example.review01import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.homework03.Itemdata class Item(val text:String ,val imageResourse:Int)class Review14Activity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_review14)val itemList = listOf(Item("蒋敦豪",R.drawable.jdh),Item("鹭卓",R.drawable.lz),Item("李耕耘",R.drawable.lgy),Item("李昊",R.drawable.lh),Item("赵一博",R.drawable.zyb),Item("卓沅",R.drawable.zy),Item("赵小童",R.drawable.zxt),Item("何浩楠",R.drawable.hhn),Item("陈少熙",R.drawable.csx),Item("王一珩",R.drawable.wyh))val recyclerView: RecyclerView = findViewById(R.id.lv)val layoutManager = LinearLayoutManager(this)val adapter = MyAdapter(itemList)recyclerView.layoutManager = layoutManagerrecyclerView.adapter = adapter}class MyAdapter(private val items: List<Item>) : RecyclerView.Adapter<MyAdapter.ViewHolder>() {inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {val textView: TextView = itemView.findViewById(com.example.homework03.R.id.test52_tv)val imageView: ImageView = itemView.findViewById(com.example.homework03.R.id.test52_iv)}override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {// 使用新的布局文件 item_layout.xmlval view = LayoutInflater.from(parent.context).inflate(com.example.homework03.R.layout.item_layout, parent, false)return ViewHolder(view)}override fun onBindViewHolder(holder: ViewHolder, position: Int) {val item = items[position]holder.textView.text = item.textholder.imageView.setImageResource(item.img)}override fun getItemCount(): Int {return items.size}}}

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

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

相关文章

网络安全中的 SOC 是什么?

当今世界&#xff0c;网络威胁日益增多&#xff0c;确保网络安全已成为各种规模企业的首要任务。网络安全讨论中经常出现的一个术语是 SOC&#xff0c;即安全运营中心的缩写。但网络安全中的 SOC 是什么呢&#xff1f; SOC在防御网络威胁、管理安全事件和全天候监控系统方面发…

智选球员:运用动态规划提升棒球队的签约效益

目录 一、签约棒球自由球员 二、分析和理解 &#xff08;一&#xff09;问题背景回顾 &#xff08;二&#xff09;目标确定 &#xff08;三&#xff09;约束条件分析 &#xff08;四&#xff09;明确输出要求 三、动态规划&#xff08;Dynamic Programming&#xff09;解…

Lua面向对象实现

Lua中的面向对象是通过表&#xff08;table&#xff09;来模拟类实现的&#xff0c;通过setmetatable(table,metatable)方法&#xff0c;将一个表设置为当前表的元表&#xff0c;之后在调用当前表没有的方法或者键时&#xff0c;会再查询元表中的方法和键&#xff0c;以此来实现…

航空美食新升级,光明肉业携手东航食品打造经典辣肉面新篇章

在航空餐饮日益注重品质与创新的大环境下&#xff0c;各大航空公司纷纷在美食领域下功夫&#xff0c;力求为乘客提供更加多元化、高品质的餐饮体验。近日&#xff0c;东航那碗面再次成为行业焦点&#xff0c;其经典辣肉面在光明肉业的助力下实现了“创新”升级&#xff0c;为乘…

在.NET 6中使用Serilog收集日志

此示例的完整详细信息&#xff1a;https://download.csdn.net/download/hefeng_aspnet/89998498 Serilog 是一个日志库&#xff0c;它提供对文件、控制台和其他几个地方的记录。它易于配置&#xff0c;并且具有干净且易于使用的界面。 Serilog具有无与伦比的输出目的地选择&…

STM32 HAL库开发学习5. 系统滴答定时器

STM32 HAL库开发学习5. 系统滴答定时器 一、滴答定时器概述1. 概述2. 时钟源3. 寄存器&#xff08;1&#xff09;控制与状态寄存器 STK_CTRL&#xff08;2&#xff09;重载寄存器 STK_LOAD&#xff08;3&#xff09;当前值寄存器 STK_VAL 二、HAL库滴答定时器初始化三、SysTick…

智慧零售时代传统供应链的痛点与数字化变革:定制开发 AI 智能名片 S2B2C 商城系统的应用与影响

摘要&#xff1a;本文深入探讨了智慧零售时代传统供应链所面临的痛点&#xff0c;分析了在该时代背景下打通线上线下渠道以及整合资源的关键需求。阐述了传统零售供应链若线上线下渠道独立、数据不流通将导致的库存管理与物流效率问题&#xff0c;并强调其必须进行数字化变革以…

国家信息中心单志广:智慧城市转型中的数据要素价值释放

今日&#xff0c;由中国电信集团主办的2024数字科技生态大会数据要素合作论坛在广州市举办。国家发改委国家信息中心信息化和产业发展部主任单志广在论坛发展主旨演讲&#xff1a;智慧城市转型中的数据要素价值释放&#xff0c;主要包括发展新形势、数据新要素、数据新产权、数…

从零开始使用GOT-OCR2.0——多模态OCR项目:微调数据集构建 + 训练(解决训练报错,成功实验微调训练)

在上一篇文章记录了GOT-OCR项目的环境配置和基于官方模型参数的基础使用。环境安装的博文快速链接&#xff1a; 从零开始使用GOT-OCR2.0——多模态通用型OCR&#xff08;非常具有潜力的开源OCR项目&#xff09;&#xff1a;项目环境安装配置 测试使用-CSDN博客 本章在环境配置…

【在Linux世界中追寻伟大的One Piece】读者写者问题与读写锁

目录 1 -> 读者写者问题 1.1 -> 什么是读者写者问题 1.2 -> 读者写者与生产消费者的区别 1.3 -> 如何理解读者写者问题 2 -> 读写锁 2.1 -> 读写锁接口 3 -> 读者优先(Reader-Preference) 4 -> 写者优先(Writer-Preference) 1 -> 读者写者…

基于PSO粒子群优化的CNN-LSTM-SAM网络时间序列回归预测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核心程序 &#xff08;完整版代码包含详细中文注释和操作步骤视频&#xff09…

vxe-table 键盘操作,设置按键编辑方式,支持覆盖方式与追加方式

vxe-table 全键盘操作&#xff0c;按键编辑方式设置&#xff0c;覆盖方式与追加方式&#xff1b; 通过 keyboard-config.editMode 设置按键编辑方式&#xff1b;支持覆盖方式编辑和追加方式编辑 安装 npm install vxe-pc-ui4.3.15 vxe-table4.9.15// ... import VxeUI from v…

Java设计模式笔记(二)

十四、模版方法模式 1、介绍 1&#xff09;模板方法模式(Template Method Pattern)&#xff0c;又叫模板模式(Template Patern)&#xff0c;在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需重写方法实现&#xff0c;但调用将以抽象类中定义的方式进行。 2&…

ZLMediaKit+wvp (ffmpeg+obs)推拉流测试

这里使用了两种方式: ffmpeg命令和 OBS OBS推流在网上找了些基本没有说明白的, 在ZLMediaKit的issues中看到了一个好大哥的提问在此记录一下 使用OBS推流&#xff0c;rtmp&#xff0c;报鉴权失败 推流 1. ffmpeg命令推流 官方说明文档地址: 推流规则 rtsp://192.168.1.4:10554…

思科模拟器路由器的基本配置

一、实验目的 了解路由器的作用掌握路由器的基本配置方法 3、掌握路由器模块的使用和互连方式 二、实验环境 2811路由器一台&#xff0c;计算机两台&#xff0c;Console配置线一根&#xff0c;网线若干&#xff1b;本实验拓扑图如图8-1所示&#xff1b;计算机IP地址规划如表8-…

TOPSIS法

TOPSIS 法&#xff1a;多属性决策的有效工具 在多属性决策分析领域&#xff0c;TOPSIS 法&#xff08;Technique for Order Preference by Similarity to Ideal Solution&#xff09;是一种广泛应用且极具价值的方法。它为解决复杂的决策问题提供了一种系统、科学的途径&#…

嵌入式入门Day24

数据结构Day5 树形结构相关概念二叉树相关概念二叉树的状态二叉树性质二叉树的存储二叉树根据已有序列推出树的结构练习 算法相关概念算法特性算法的设计要求时间复杂度排序算法冒泡排序&#xff08;改良版&#xff09;选择排序&#xff08;O(n^2)&#xff09;直接插入排序&…

selenium常见接口函数使用

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;测试_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 1. 查找 查找方式 css_s…

3-5 C常用的字符串库函数

1.0 字符串库函数 strlen()函数用于返回字符串的长度&#xff0c;不包括结尾\0 uint32_t strlen(char *str) {uint32_t len 0;while (str[len] ! \0){len;}return len; } 编译器在处理字符串时&#xff0c;会自动的在数据末尾添加ASCI码“0对应十进制0&#xff0c;便于程序对…

weblogic开启https

JSK证书生成 生成密钥库和证书 使用Java的keytool命令来生成一个Java密钥库&#xff08;Keystore&#xff09;和证书。keytool是Java开发工具包&#xff08;JDK&#xff09;中用于管理密钥库和证书的命令行工具。 #创建证书存放目录 [weblogicosb1 jksHL]$ mkdir -p /home/w…