安卓TextView 拖动命名

需求:该布局文件使用线性布局来排列三个文本视图和一个按钮,分别用于显示两个动物名称以及占位文本视图。在占位文本视图中,我们为其设置了背景和居中显示样式,并用其作为接收拖放操作的目标

效果图;

实现代码

第一布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/animalName1"android:text="狮子"android:layout_width="wrap_content"android:layout_height="wrap_content"/><TextViewandroid:id="@+id/animalName2"android:text="老虎"android:layout_width="wrap_content"android:layout_height="wrap_content"/><TextViewandroid:id="@+id/namePlaceholder"android:text="请将动物名字拖到这里"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@android:drawable/editbox_background_normal"android:gravity="center"/><Buttonandroid:id="@+id/btnGetTexts"android:text="获取文本"android:layout_width="wrap_content"android:layout_height="wrap_content"/>
</LinearLayout>

实现代码

public class AttentionQuestionsActivity extends AppCompatActivity {// 用于存储动物名称视图和其对应的名称字符串private Map<View, String> nameMap = new HashMap<>();// 存储被拖放的文本字符串private ArrayList<String> draggedTexts = new ArrayList<>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_attention_questions);// 获取 UI 控件TextView animalName1 = findViewById(R.id.animalName1);TextView animalName2 = findViewById(R.id.animalName2);TextView namePlaceholder = findViewById(R.id.namePlaceholder);Button btnGetTexts = findViewById(R.id.btnGetTexts);// 将动物名称视图和其对应的字符串存储到 nameMap 中nameMap.put(animalName1, "狮子");nameMap.put(animalName2, "老虎");// 为每个动物名称视图设置长按监听器for (View view : nameMap.keySet()) {// 将名称字符串存储到视图的 tag 中view.setTag(nameMap.get(view));view.setOnLongClickListener(v -> {// 创建 ClipData 对象并启动拖放操作ClipData.Item item = new ClipData.Item((CharSequence) v.getTag());String[] mimeTypes = {ClipDescription.MIMETYPE_TEXT_PLAIN};ClipData data = new ClipData(v.getTag().toString(), mimeTypes, item);View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);v.startDragAndDrop(data, shadowBuilder, null, 0);return true;});}// 设置占位文本视图的拖放监听器namePlaceholder.setOnDragListener((v, event) -> {switch (event.getAction()) {case DragEvent.ACTION_DROP:// 获取被拖放的文本并设置到占位文本视图中ClipData.Item item = event.getClipData().getItemAt(0);CharSequence name = item.getText();((TextView) v).setText(name);draggedTexts.add(name.toString());break;}return true;});// 设置获取文本按钮的点击监听器btnGetTexts.setOnClickListener(v -> {// 将被拖放的文本字符串拼接成一个长字符串并显示到 Toast 中StringBuilder sb = new StringBuilder();for (String text : draggedTexts) {sb.append(text).append("\n");}Toast.makeText(AttentionQuestionsActivity.this, sb.toString(), Toast.LENGTH_LONG).show();});}
}

注意

 在这个类中,我们为每个动物名称视图设置了长按监听器,并在其中启动了拖放操作。同时,我们还为占位文本视图设置了拖放监听器,并在其中将被拖放的文本设置到该视图中。最后,当用户点击获取文本按钮时,我们将被拖放的文本字符串拼接成一个长字符串并显示到 Toast 中。以上只是简单功能实现,

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

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

相关文章

Spring-面试题

一、Spring 1、Spring的优势 通过IOC、AOP简化java开发 IOC减低业务对象替换的复杂性,降低耦合AOP允许将一些通用的事务、日志进行集中处理,从而提高更好的复用性Spring生态圈低嵌入式涉及,代码污染小高度开放性,用的人多2、Spring的核心 IOC控制反转: Spring容器为我们创…

如何查找Windows的桌面文件夹?这里提供详细步骤

当你的电脑上有不同的用户时&#xff0c;Windows 11、10、…上的桌面文件夹或桌面目录特别有用&#xff0c;那么哪里才是真正的桌面文件夹目录。 自己的Windows桌面目录 1、启动Windows资源管理器 2、按F4键并输入%UserProfile% 3、点击桌面 这是你个人桌面的正确文件夹路径…

【送码】【IOS付费榜92名】春节不打烊,功德加倍攒

整体效果概览图 船新玩法&#xff0c;换个姿势攒功德 竞品玩法 过于简单&#xff1a;都是敲敲&#xff0c;然后设置里换换木鱼样式、音色等 本APP玩法 功德上云&#xff1a;敲击之后&#xff0c;会将所积攒的功德上传至fo祖云端 功德可视化&#xff1a;每日功德、3D功德地…

Calendar的使用(Java)

直接从需求来理解&#xff1a;将2024年2月16日增加一个月 如果不使用Calendar的话&#xff0c;我们需要定义字符串记住这个日期&#xff0c;然后把字符串解析成Date日期对象&#xff0c;通过Date日期对象获取其毫秒值&#xff0c;然后增加一个月的毫秒值&#xff0c;再格式化时…

东莞添威电子开关电源测控软件开发

加我微信hezkz17&#xff0c;可学习嵌入式开关电源开发技术进答疑群 1 ATE 2 开关电源产品

需要学习的知识点清单

div 4 div 3 F :拓扑排序 G : 组合数学 D : 结构体排序 div 2 div 12

2024年!PyCharm快捷键大全

收藏&#xff01;PyCharm快捷键大全 工欲善其事必先利其器&#xff0c;PyCharm 是最popular的Python开发工具&#xff0c;它提供的功能非常强大&#xff0c;是构建大型项目的理想工具之一&#xff0c;如果能挖掘出里面实用技巧&#xff0c;能带来事半功倍的效果。 本文主要向大…

try catch中的finally代码一定会执行吗?

1.正常情况 正常运行的情况下&#xff0c;finally 中的代码是一定会执行的&#xff0c;但是&#xff0c;如果遇到以下异常情况&#xff0c;那么 finally 中的代码就不会继续执行了&#xff1a; 程序在 try 块中遇到 System.exit() 方法&#xff0c;会立即终止程序的执行&#…

Kubernetes(K8S)集群部署实战

目录 一、准备工作1.1、创建3台虚拟机1.1.1、下载虚拟机管理工具1.1.2、安装虚拟机管理工具1.1.3、下载虚Centos镜像1.1.4、创建台个虚拟机1.1.5、设置虚拟机网络环境 1.2、虚拟机基础配置&#xff08;3台虚拟机进行相同处理&#xff09;1.2.1、配置host1.2.2、关闭防火墙1.2.3…

Codeforces Round 921 (Div. 2)题解(A-C)

A We Got Everything Covered! 思路 可以采用划分区域的思想。 共划分为 n 个区域每一个区域含有所包含的前 k 个字母 证明&#xff1a; 正确性&#xff1a;无论所要求的字符串str为什么&#xff0c;只需要在区域i中取出 s t r [ i ] str[i] str[i]即可最优性&#xff1a…

构造题记录

思路&#xff1a;本题要求构造一个a和b数组相加为不递减序列&#xff0c;并且b数组的极差为最小的b数组。 可以通过遍历a数组并且每次更新最大值&#xff0c;并使得b数组为这个最大值和当前a值的差。 #include <bits/stdc.h> using namespace std; #define int long lon…

【BUUCTF 加固题】Ezsql 速通

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

阿里云/腾讯云幻兽帕鲁服务器据点最大帕鲁工作数量最多15个,改成20不生效?

例如&#xff0c;在阿里云的计算巢管理中&#xff0c;找到你的这台部署幻兽帕鲁的服务器实例&#xff0c;选择右上角的“修改游戏配置” 然后选择“基地内工作帕鲁的最大数量”改成20 有人说更改上面的数字&#xff0c;根本不起作用。原因可能如下&#xff1a; 参考资料&#…

SORA:OpenAI最新文本驱动视频生成大模型技术报告解读

Video generation models as world simulators&#xff1a;作为世界模拟器的视频生成模型 1、概览2、Turning visual data into patches&#xff1a;将视觉数据转换为补丁3、Video compression network&#xff1a;视频压缩网络4、Spacetime Latent Patches&#xff1a;时空潜在…

C++学习:最值查找

min和max函数 1.min(a&#xff0c;b)返回a和b中较小的那个值&#xff0c;只能传入两个值&#xff0c;或传入一个列表。 例如: min(3&#xff0c;5) 3 min({1,2,3,4})1 2.max(a&#xff0c;b)返回a和b中较大的那个值&#xff0c;只能传入两个值&#xff0c;或传入一个列表。 例…

《数电》理论笔记-第3章-常用组合逻辑电路及MSI组合电路模块的应用

一&#xff0c;编码器和译码器 1&#xff0c;编码器 编码:用由0和1组成的代码表示不同的事物。 编码器:实现编码功能的电路&#xff0c; 常见编码器:普通编码器、优先编码器、二进制编码器二-十进制编码器等等 1.1 三位二进制普通编码器和三位二进制优先编码器 1分58秒开始 …

为什么您的企业 AI 战略可能会在 2024 年失败:模型下降与数据上升

我怀疑有些人会指责我设置引诱性标题。 其他人会说&#xff0c;这并不是真正的范围——大多数人在最初的人工智能尝试中都会失败&#xff0c;但这并不重要&#xff0c;学习是值得的。在某种程度上&#xff0c;两者都是对的——但我认为为什么企业会失败是值得探索的&#xff0c…

2024-02-16 web3-区块链-keypass记录

摘要: 2024-02-16 web3-区块链-keypass记录 文档&#xff1a; Introduction - Keypass Docs What is KEYPASS&#xff1f; - Keypass Docs What is KEYPASS&#xff1f; KeyPass Wallet is a new smart contract wallet that provides a secure and customizable registration…

并发编程(1)基础篇

1 概览 1.1 这门课讲什么 这门课中的【并发】一词涵盖了在 Java 平台上的 进程线程并发并行 以及 Java 并发工具、并发问题以及解决方案&#xff0c;同时也会讲解一些其它领域的并发 1.2 为什么学这么课 我工作中用不到并发啊&#xff1f; 那你还是没有接触到复杂项目. …

【JavaScript】添加、移除、移动、复制、创建和查找节点

创建新节点 document.createElement(tagName); // 创建⼀个指定标签名的元素节点 document.createTextNode(text); // 创建⼀个包含指定⽂本的⽂本节点 document.createDocumentFragment(); // 创建⼀个空的⽂档⽚段节点 添加、移除、替换、插⼊节点 parentNode.appendChild(…