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的功能的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin 实现从顶部带TextView(点击取消)的弹窗的功能

转TextView长按复制实现方法小结

Kotlin 仿微信长按列表弹出菜单(动画)

Kotlin之设置监听

android开发中获取选中文字以及弹出框

H5移动端禁止长按弹出系统菜单"选择复制","在浏览器打开"