Kotlin 实现长按TextView弹出自定义复制+全选框+PopupWindow的功能
Posted 彬sir哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin 实现长按TextView弹出自定义复制+全选框+PopupWindow的功能相关的知识,希望对你有一定的参考价值。
一、测试
第一图CSDN APP原效果,第二gif和第三图实现:
二、项目,Module项目代码中可以看,最好不要改
三、理解
1.MainActivity.kt代码,看一下说明
class MainActivity : AppCompatActivity()
private var mSelectableTextHelper: SelectableTextHelper? = null
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mSelectableTextHelper = SelectableTextHelper.Builder(tv_test)
//选中文本的背景颜色
.setSelectedColor(resources.getColor(R.color.selected_blue))
//游标的大小
.setCursorHandleSizeInDp(20f)
//选择游标的颜色
.setCursorHandleColor(resources.getColor(R.color.cursor_handle_color))
.build()
整个自定义的复制全选功能视图上主要有三个部分:
- 操作框
- 选中文本
- 选择游标
在具体实现中有以下要点:
- 自定义选择游标,可以拖动定位选中文本,大小可以设置
- 文本的选中状态
- 操作框的显示,以及对应操作的处理
- 在可滑动布局中的特殊处理,例如在ScrollView中,当视图滚动时隐藏或者移动选择游标,隐藏操作框,停止滑动时重新显示选择游标和操作框
- 选中文本后,点击TextView取消选择
2.Module项目library中有两个视图布局,1、操作框无箭头,2、操作框有箭头
layout_operate_windows.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_operate_window"
android:orientation="horizontal"
android:paddingLeft="5dp"
android:paddingRight="5dp">
<TextView
android:id="@+id/tv_copy"
android:text="@string/copy"
style="@style/OperateTextView"/>
<TextView
android:id="@+id/tv_select_all"
android:text="@string/select_all"
style="@style/OperateTextView"/>
</LinearLayout>
layout_operate_windows2.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_operate_window"
android:orientation="horizontal"
android:paddingLeft="5dp"
android:paddingRight="5dp">
<TextView
android:id="@+id/tv_copy"
style="@style/OperateTextView"
android:text="@string/copy" />
<TextView
android:id="@+id/tv_select_all"
style="@style/OperateTextView"
android:text="@string/select_all" />
</LinearLayout>
<ImageView
android:id="@+id/iv_triangle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/tv_copy"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_marginTop="41dp"
android:layout_marginEnd="245dp"
android:layout_marginRight="253dp"
android:src="@drawable/triangle_down" />
</RelativeLayout>
四、下载源码github地址:Kotlin 实现长按TextView弹出自定义复制+全选框+PopupWindow的功能
以上是关于Kotlin 实现长按TextView弹出自定义复制+全选框+PopupWindow的功能的主要内容,如果未能解决你的问题,请参考以下文章