Android——基本控件(下)(十九)
1. 菜单:Menu
1.1 知识点
(1)掌握Android中菜单的使用;
(2)掌握选项菜单(OptionsMenu)的使用;
(3)掌握上下文菜单(ContextMenu)的使用;
(4)掌握子菜单(SubMenu)的使用;
1.2 具体内容

package com.example.menuproject;import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;public class MenuActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_menu);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {menu.add(Menu.NONE,//菜单不分组Menu.FIRST+1,//菜单项的id1,//菜单的编号"添加")//菜单标题.setIcon(//设置菜单图标R.drawable.add);menu.add(Menu.NONE,Menu.FIRST+2,2,"保存").setIcon(R.drawable.save);menu.add(Menu.NONE,Menu.FIRST+3,3,"编辑").setIcon(R.drawable.edit);menu.add(Menu.NONE,Menu.FIRST+4,4,"详细").setIcon(R.drawable.detail);menu.add(Menu.NONE,Menu.FIRST+5,5,"删除").setIcon(R.drawable.delete);menu.add(Menu.NONE,Menu.FIRST+6,6,"更多").setIcon(R.drawable.more);return true;}}
只需要在onCreateOptionsMenu(Menu menu)去进行菜单的设置就行
@Overridepublic boolean onPrepareOptionsMenu(Menu menu){Toast.makeText(this, "菜单显示前操作", 0).show();return true;}
以上是在菜单显示之前执行的一个方法,可以从父类当中去覆写以便实现一些逻辑
@Overridepublic void onOptionsMenuClosed(Menu menu){Toast.makeText(this, "选项关闭", 0).show();}
以上实在菜单关闭之后执行的一个方法。
@Overridepublic boolean onOptionsItemSelected(MenuItem item){switch (item.getItemId()){case Menu.FIRST+1:Toast.makeText(this, "这是添加菜单项", 0).show();break;case Menu.FIRST+2:Toast.makeText(this, "这是保存菜单项", 0).show();break;case Menu.FIRST+3:Toast.makeText(this, "这是编辑菜单项", 0).show();break;case Menu.FIRST+4:Toast.makeText(this, "这是详情菜单项", 0).show();break;case Menu.FIRST+5:Toast.makeText(this, "这是删除菜单项", 0).show();break;case Menu.FIRST+6:Toast.makeText(this, "这是更多菜单项", 0).show();break;}return false;}
以上都是在Activity当中去添加菜单选项。
当然也可以在xml文件中添加菜单选项。
<menu xmlns:android="http://schemas.android.com/apk/res/android" ><itemandroid:id="@+id/m1"android:orderInCategory="100"android:title="添加"/><itemandroid:id="@+id/m2"android:orderInCategory="101"android:title="保存"/><itemandroid:id="@+id/m3"android:orderInCategory="102"android:title="编辑"/><itemandroid:id="@+id/m4"android:orderInCategory="103"android:title="详情"/><itemandroid:id="@+id/m5"android:orderInCategory="104"android:title="删除"/><itemandroid:id="@+id/m6"android:orderInCategory="105"android:title="更多"/></menu>
此处需要注意的是,加载的xml文件不是layout文件而是menu文件
@Overridepublic boolean onCreateOptionsMenu(Menu menu) {super.getMenuInflater().inflate(R.menu.menu, menu);return true;}
上下文菜单

package com.example.menuproject;import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;public class MenuActivity extends Activity {String data[] ={"中国高校培训","培训课程","万策智业"};ListView listView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.listView = new ListView(this);listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,this.data));super.registerForContextMenu(listView);//注册上下文菜单super.setContentView(listView);}@Overridepublic void onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo menuInfo) {super.onCreateContextMenu(menu, v, menuInfo);menu.setHeaderTitle("信息操作");menu.add(Menu.NONE,Menu.FIRST+1,1,"添加联系人");menu.add(Menu.NONE,Menu.FIRST+2,2,"查看详情");menu.add(Menu.NONE,Menu.FIRST+3,3,"删除信息");menu.add(Menu.NONE,Menu.FIRST+4,4,"编辑");}}
以上是实现上下文菜单组件
@Overridepublic boolean onContextItemSelected(MenuItem item){switch (item.getItemId()){case Menu.FIRST+1:Toast.makeText(this, "添加联系人", 0).show();break;case Menu.FIRST+2:Toast.makeText(this, "查看详情", 0).show();break;case Menu.FIRST+3:Toast.makeText(this, "删除信息", 0).show();break;case Menu.FIRST+4:Toast.makeText(this, "编辑", 0).show();break;}return false;}
子菜单:SubMenu

@Overridepublic boolean onCreateOptionsMenu(Menu menu){SubMenu fileMenu = menu.addSubMenu("文件");SubMenu editMenu = menu.addSubMenu("编辑");fileMenu.add(Menu.NONE,Menu.FIRST+1,1,"新建");fileMenu.add(Menu.NONE,Menu.FIRST+2,2,"打开");editMenu.add(Menu.NONE,Menu.FIRST+3,3,"保存");editMenu.add(Menu.NONE,Menu.FIRST+4,4,"撤销");return true;}
子菜单的监听
@Overridepublic boolean onOptionsItemSelected(MenuItem item){switch (item.getItemId()){case Menu.FIRST+1:Toast.makeText(this, "新建子菜单", 0).show();break;case Menu.FIRST+2:Toast.makeText(this, "打开子菜单", 0).show();break;case Menu.FIRST+3:Toast.makeText(this, "保存子菜单", 0).show();break;case Menu.FIRST+4:Toast.makeText(this, "撤销子菜单", 0).show();break;}return false;}
1.3 小结
(1)界面开发之中使用菜单可以有效的对工具集进行管理;
(2)Android中一共分为三种菜单:选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu)。
2. 隐式抽屉组件:SlidingDrawer
2.1 知识点
(1)掌握SlidingDrawer 的主要作用及实现;
(2)掌握SlidingDrawer 组件的事件处理方式;
2.2 具体内容

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".SlidingDrawerActivity" ><SlidingDrawer android:id="@+id/sd"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"android:handle="@+id/img"android:content="@+id/content"><ImageView android:id="@+id/img"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/pic_8"/><LinearLayoutandroid:id="@+id/content"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"></LinearLayout> </SlidingDrawer></LinearLayout>
定义一个内嵌LInearLayout,以便能够在后台动态添加程序集
package com.example.slidingdrawer;import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SlidingDrawer;
import android.widget.SlidingDrawer.OnDrawerCloseListener;
import android.widget.SlidingDrawer.OnDrawerOpenListener;
import android.widget.SlidingDrawer.OnDrawerScrollListener;
import android.widget.Toast;public class SlidingDrawerActivity extends Activity {String data[]={"兰州","定西","武威","张掖"};ListView listView = null;SlidingDrawer sd = null;ImageView img = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_sliding_drawer);LinearLayout content = (LinearLayout) super.findViewById(R.id.content);listView = new ListView(this);listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,data));content.addView(this.listView);sd = (SlidingDrawer) super.findViewById(R.id.sd);img = (ImageView) super.findViewById(R.id.img);sd.setOnDrawerOpenListener(new OnDrawerOpenListenerImpl());sd.setOnDrawerCloseListener(new OnDrawerCloseListenerImpl());sd.setOnDrawerScrollListener(new OnDrawerScrollListenerImpl());}private class OnDrawerOpenListenerImpl implements OnDrawerOpenListener{@Overridepublic void onDrawerOpened() {img.setImageResource(R.drawable.pic_6);}}private class OnDrawerCloseListenerImpl implements OnDrawerCloseListener{@Overridepublic void onDrawerClosed() {img.setImageResource(R.drawable.pic_8);}}private class OnDrawerScrollListenerImpl implements OnDrawerScrollListener{@Overridepublic void onScrollEnded() {Toast.makeText(SlidingDrawerActivity.this, "窗口拖动结束", 0).show();}@Overridepublic void onScrollStarted() {// TODO Auto-generated method stubToast.makeText(SlidingDrawerActivity.this, "窗口拖动开始", 0).show();}}
}
2.3 小结
(1)使用SlidingDrawer 组件可以更好的管理按钮操作集。
3. 缩放控制:ZoomControls
3.1 知识点
(1)掌握ZoomControls组件的使用;
3.2 具体内容

实现利用缩放组件进行对字体大小缩放。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".ZoomControlsActivity" ><TextViewandroid:id="@+id/tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="ZoomControls控件控制文字缩放" android:textSize="10dp"/><ZoomControls android:id="@+id/zoomcontrols"android:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="bottom"/></LinearLayout>
package com.example.zoomcontrols;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.ZoomControls;public class ZoomControlsActivity extends Activity {int size =10;TextView tv = null;ZoomControls zc =null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_zoom_controls);zc = (ZoomControls) super.findViewById(R.id.zoomcontrols);tv = (TextView) super.findViewById(R.id.tv);zc.setOnZoomInClickListener(new OnZoomInCLickListenerImpl());zc.setOnZoomOutClickListener(new OnZoomOutCLickListenerImpl());}//放大监听private class OnZoomInCLickListenerImpl implements OnClickListener{@Overridepublic void onClick(View v) {ZoomControlsActivity.this.size += 2;ZoomControlsActivity.this.tv.setTextSize(size);}}//缩小监听private class OnZoomOutCLickListenerImpl implements OnClickListener{@Overridepublic void onClick(View v) {ZoomControlsActivity.this.size -= 2;ZoomControlsActivity.this.tv.setTextSize(size);}}
}
3.3 小结
(1)ZoomControls组件可以由用户根据自己的需要控制显示的大小。
4. 弹出窗口:PopupWindow
4.1 知识点
(1)掌握弹出窗口的基本实现;
(2)掌握弹出窗口的事件处理操作;
4.2 具体内容

弹出窗口意味着在原有的手机上,增加一个专门的显示层,作为弹出窗口显示的空间。
既然PopupWindow组件是可以直接在界面上显示自己的一个界面层,那么就需要专门的一个布局管理器文件,来定PopupWindow组件。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="请选择您所需要的状态" /><RadioGroup android:id="@+id/checkStatus"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><RadioButton android:id="@+id/onLine"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="在线"/><RadioButton android:id="@+id/offLine"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="离线"/><RadioButton android:id="@+id/steach"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="隐身"/></RadioGroup><Button android:id="@+id/cancel"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="取消"/>
</LinearLayout>
以上的布局管理器就是一个作为PopupWindow的显示。
现在我们来定义我们主布局管理器。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TextViewandroid:id="@+id/statusInfo"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="用户当前状态:在线" /><Button android:id="@+id/popbut"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="选择状态"/></LinearLayout>
以上就是主布局管理器,现在还有一个问题,现在是通过按钮事件去弹出PopupWindow,那么肯定需要一个转换器将需要显示的布局管理器设置到PopupWindow上。这时需要使用LayoutInflater进行转换。现在我们来编写Activity程序。
package com.example.popupwindowproject;import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.PopupWindow;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TextView;
public class PopupWindowActivity extends Activity {private Button statuBut = null;private TextView statuInfo = null;private RadioGroup checkStatu = null;private Button cancelBut = null;private PopupWindow popWin = null;private View popView = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);super.setContentView(R.layout.activity_popup_window);this.statuBut = (Button) super.findViewById(R.id.popbut);this.statuInfo = (TextView) super.findViewById(R.id.statusInfo);this.statuBut.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {LayoutInflater inflater = LayoutInflater.from(PopupWindowActivity.this);PopupWindowActivity.this.popView = (View) inflater.inflate(R.layout.popup_window, null);//将布局文件转换成组件PopupWindowActivity.this.popWin = new PopupWindow(PopupWindowActivity.this.popView,300,220);//创建一个新的PopupWindowPopupWindowActivity.this.popWin.setContentView(PopupWindowActivity.this.popView);//设置显示组件PopupWindowActivity.this.checkStatu = (RadioGroup) PopupWindowActivity.this.popView.findViewById(R.id.checkStatus);PopupWindowActivity.this.cancelBut = (Button) PopupWindowActivity.this.popView.findViewById(R.id.cancel);PopupWindowActivity.this.checkStatu.setOnCheckedChangeListener(new OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) {RadioButton rbut = (RadioButton) PopupWindowActivity.this.popView.findViewById(group.getCheckedRadioButtonId());//取得选中的组件IDPopupWindowActivity.this.statuInfo.setText("您选中的状态是:"+rbut.getText());//修改我们文本显示组件的内容}});PopupWindowActivity.this.cancelBut.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubPopupWindowActivity.this.popWin.dismiss();//隐藏PopupWindow}});PopupWindowActivity.this.popWin.showAtLocation(PopupWindowActivity.this.statuBut,Gravity.CENTER, 0, 0);//显示弹出窗口}});}
}
是要是组件就离不开布局文件,有个前提:就是组件中显示的内容会比较多。
4.3 小结
(1)弹出窗口需要一个单独的布局管理器进行配置;
(2)可以使用LayoutInflater通过配置文件读取组件信息;
相关文章:
Android——基本控件(下)(十九)
1. 菜单:Menu 1.1 知识点 (1)掌握Android中菜单的使用; (2)掌握选项菜单(OptionsMenu)的使用; (3)掌握上下文菜单(ContextMenu&am…...
聚类分析 | MATLAB实现基于DBSCAD密度聚类算法可视化
聚类分析 | MATLAB实现基于LP拉普拉斯映射的聚类可视化 目录 聚类分析 | MATLAB实现基于LP拉普拉斯映射的聚类可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于DBSCAD密度聚类算法可视化,MATLAB程序。 使用带有KD树加速的dbscan_with_kdtree函数进行…...
reactantd(12)动态表单的默认值问题
最近遇到一个需求是有一个表单可以输入各种信息,然后还需要有一个编辑功能,点击编辑的时候需要把当前数据填入到表单里面。在网上查了很多种方法,然后我的思路是使用initialValues搭配setState()使用。默认值都为空,然后点击单条数…...
无涯教程-Python机器学习 - Stochastic Gradient Boosting函数
它也称为梯度提升机。在下面的Python食谱中,我们将通过使用pima Indians糖尿病数据集上的 sklearn 的 GradientBoostingClassifier 类来创建随机梯度Boostingensemble模型进行分类。 首先,导入所需的软件包,如下所示: from pandas import read_csv from sklearn.model_select…...
SOLIDWORKS中多实体文件到装配体的转换技巧
我们在做机械等工程设计中,有时为了节省时间,需要把多实体的“零件”,直接转换为装配体,不再另外装配,这样能大大简化设计的操作时间,复杂程度。 在这里,我们首先要了解,SOLIDWORKS文…...
Transformer (Attention Is All You Need) 论文精读笔记
Transformer(Attention Is All You Need) Attention Is All You Need 参考:跟李沐学AI-Transformer论文逐段精读【论文精读】 摘要(Abstract) 首先摘要说明:目前,主流的序列转录(序列转录:给…...
Git企业开发控制理论和实操-从入门到深入(二)|Git的基本操作
前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总https://blog.csdn.net/yu_cblog/cate…...
Positive Technologies 专家帮助修复 Western Digital 网络存储设备中的一个危险漏洞
Positive Technologies 专家帮助修复 Western Digital 网络存储设备中的一个危险漏洞 经过验证的攻击者可利用该漏洞在受攻击的设备上注入恶意软件并远程访问文件 Western Digital 感谢 Positive Technologies 专家 Nikita Abramov 发现 Western Digital NAS 固件中的一个漏洞…...
【springboot】springboot定时任务:
文章目录 一、文档:二、案例: 一、文档: 【cron表达式在线生成器】https://cron.qqe2.com/ 二、案例: EnableScheduling //开启任务调度package com.sky.task;import com.sky.entity.Orders; import com.sky.mapper.OrderMapper; …...
腾讯云学生服务器申请、学生认证入口及学生机价格表
腾讯云学生服务器申请、学生认证入口及学生机价格表,学生机申请流程,腾讯云学生服务器优惠活动:轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年,轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年&…...
pip安装mysqlclient依赖报错 /bin/sh: 1: mysql_config: not found如何解决
报错信息: Collecting mysqlclient2.1.0Downloading https://mirrors.aliyun.com/pypi/packages/de/79/d02be3cb942afda6c99ca207858847572e38146eb73a7c4bfe3bdf154626/mysqlclient-2.1.0.tar.gz (87 kB)|███████████████████████████…...
基于paddleocr的版面分析
前处理: DocTr: Document Image Transformer for Geometric Unwarping and Illumination Correction (1)几何矫正 给定一张存在几何和光照畸变的文档图像,我们首先用一个包含六个卷积模块的特征提取器对其进行特征提取…...
网工内推 | IT网工,华为、华三认证优先,15k*13薪
01 广东善能科技发展股份有限公司 招聘岗位:IT网络工程师 职责描述: 1、负责公司项目售后技术支持工作; 2、负责项目交付实施,配置调试、运维等; 3、参加合作厂商产品技术知识培训; 4、参加合作厂商工程师…...
leetcode 739. 每日温度
2023.8.28 本题用暴力双层for循环解会超时,所以使用单调栈来解决,本质上是用空间换时间。维护一个单调递减栈,存储的是数组的下标。 代码如下: class Solution { public:vector<int> dailyTemperatures(vector<int>&…...
【活体检测模型】活体检测思路推演
ref:https://arxiv.org/pdf/1611.05431.pdf https://github.com/miraclewkf/ResNeXt-PyTorch 用分类的思想做活体检测,要求准确的分出正负样本,否则,支付宝被别人用了,问题就很严重。 大部分的商用场景还是 摇摇头、张张口&#x…...
【微服务部署】03-健康检查
文章目录 1. 探针集成实现高可用1.1 LivenessProbe1.2 ReadinessProbe1.3 StartupProbe 2. 健康检查看板2.1 组件包 1. 探针集成实现高可用 LivenessReadinessStartup 1.1 LivenessProbe 判断服务是否存活结束“非存活”状态服务根据重启策略决定是否重启服务 1.2 Readines…...
SQL注入之报错注入
文章目录 报错注入是什么?报错注入获取cms账号密码成功登录 报错注入是什么? 在注入点的判断过程中,发现数据库中SQL 语句的报错信息,会显示在页面中,因此可以利用报错信息进行注入。 报错注入的原理,就是在…...
基于大数据+django+mysql的银行信用卡用户的数仓系统
系统阐述的是银行信用卡用户的数仓系统的设计与实现,对于Python、B/S结构、MySql进行了较为深入的学习与应用。主要针对系统的设计,描述,实现和分析与测试方面来表明开发的过程。开发中使用了 django框架和MySql数据库技术搭建系统的整体架构…...
【网络】多路转接——五种IO模型 | select
🐱作者:一只大喵咪1201 🐱专栏:《网络》 🔥格言:你只管努力,剩下的交给时间! 五种IO模型 | select 🍧五种IO模型🍧select🧁认识接口🧁…...
sql顺序倒序查询
要根据 orderNum 字段的顺序查询,你可以使用 SQL 的 ORDER BY 子句。默认情况下,ORDER BY 是按升序排序的,但你可以使用 DESC 关键字来指定降序排序。 以下是一个示例查询,按照 orderNum 字段的顺序将结果返回: SELEC…...
避开这些坑!微软云语音合成API从申请到调用的保姆级指南
微软云语音合成API实战:从零到落地的全流程避坑指南 第一次听到微软云的语音合成效果时,我正为一个智能客服项目焦头烂额。当时试用了市面上几乎所有主流方案,要么机械感明显,要么情感表达生硬。直到偶然点开微软的演示页面&#…...
手把手解决Simulink与贝加莱Automation Studio联调的5个典型报错(附详细截图)
手把手解决Simulink与贝加莱Automation Studio联调的5个典型报错(附详细截图) 在工业自动化领域,Simulink与贝加莱PLC的联合开发已经成为复杂控制系统设计的黄金组合。但当你满怀期待地将精心设计的Simulink模型转换为Automation Studio可执行…...
别再让死区拖后腿!用MATLAB Simulink给SVPWM逆变器做个精准‘补偿手术’
电力电子工程师实战:用MATLAB Simulink实现SVPWM逆变器的死区补偿 在电力电子系统设计中,死区效应就像电路板上的隐形杀手——它不会立即摧毁你的系统,却会悄无声息地降低整体性能。作为一名长期奋战在电机控制一线的工程师,我见过…...
开源工具高效获取B站无损音质:3大核心流程掌握Hi-Res音频下载
开源工具高效获取B站无损音质:3大核心流程掌握Hi-Res音频下载 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mi…...
Meixiong Niannian画图引擎Typora集成:Markdown文档图像生成
Meixiong Niannian画图引擎Typora集成:Markdown文档图像生成 1. 为什么文档作者需要在Typora里直接画图? 你有没有过这样的经历:写技术文档时,突然需要一张示意图来说明某个流程;写产品需求时,想快速画个…...
Nix系统修复终极指南:快速解决包管理问题与数据恢复
Nix系统修复终极指南:快速解决包管理问题与数据恢复 【免费下载链接】nix Nix, the purely functional package manager 项目地址: https://gitcode.com/gh_mirrors/ni/nix Nix作为一款纯粹函数式的包管理器,以其独特的依赖管理和环境隔离机制受到…...
PySR高性能符号回归:如何快速从复杂数据中提取可解释的数学方程
PySR高性能符号回归:如何快速从复杂数据中提取可解释的数学方程 【免费下载链接】PySR High-Performance Symbolic Regression in Python and Julia 项目地址: https://gitcode.com/gh_mirrors/py/PySR 符号回归(Symbolic Regression)…...
DeepSeek-OCR-2惊艳效果展示:多栏/斜拍/模糊PDF精准识别对比图集
DeepSeek-OCR-2惊艳效果展示:多栏/斜拍/模糊PDF精准识别对比图集 1. 从机械扫描到智能理解:OCR技术的革命性突破 如果你曾经尝试过从PDF文档中提取文字,特别是那些排版复杂、图片模糊或者拍摄角度倾斜的文档,你一定会理解那种挫…...
飞书机器人接入OpenClaw:Qwen3.5-4B-Claude模型对话触发方案
飞书机器人接入OpenClaw:Qwen3.5-4B-Claude模型对话触发方案 1. 为什么选择飞书OpenClaw的技术问答方案 去年团队内部开始频繁出现一个现象:每当新人遇到技术问题,总会在飞书群里反复老员工。简单的环境配置问题往往需要截图、录屏、文字描…...
AI Agent开发实战路线图:从入门到企业级应用的4阶段进阶指南
第一阶段|概念入门:从认知到代码 理解 AI Agent 的工作原理与架构。推荐课程:Microsoft《AI Agents for Beginners》、Hugging Face《AI Agents》。核心学习点:感知、决策、行动、反馈循环机制。第二阶段|核心技术&…...
