Android中复制及粘贴功能

我们开发中,经常会用到复制粘贴的功能。算是一个小功能,也比较简单。我把项目里用的,抽离出来,附带上自定义了一个简单的菜单弹窗。

来一张gif效果图:
这里写图片描述

直接上代码,文前后有Demo

正文类:

列表内容

/**
 * Created by zhenqi
 */
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final TextView textView = (TextView) findViewById(R.id.textView);
        final TextView textView2 = (TextView) findViewById(R.id.textView2);
        EditText editText = (EditText) findViewById(R.id.editText);

        //第一个文字的长按监听
        textView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                showMenu(textView);
                return true;
            }
        });
        //第二个文字的长按监听
        textView2.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                showMenu(textView2);
                return true;
            }
        });

    }

    public void showMenu(final TextView textView) {
        //可以按照需求随意添加 中心显示的Dialog
        CenterMenuDialog centerMenuDialog = new CenterMenuDialog(MainActivity.this);
        //第一个选择条目
        Menu copyMenu = new Menu.Builder().setCaption("复制").setMenuCommand(new MenuCommand() {
            @Override
            public void onClick() {
                ClipboardManager myClipboard;
                myClipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
                myClipboard.setPrimaryClip(ClipData.newPlainText("content", textView.getText()));
                Toast.makeText(MainActivity.this, "内容已经复制", Toast.LENGTH_SHORT).show();
            }
        }).build();
        centerMenuDialog.addMenu(copyMenu);

        //第二个选择条目
        Menu themeMenu = new Menu.Builder().setCaption("取消").setMenuCommand(new MenuCommand() {
            @Override
            public void onClick() {
                Toast.makeText(MainActivity.this, "已经取消", Toast.LENGTH_SHORT).show();
            }
        }).build();
        centerMenuDialog.addMenu(themeMenu);

        //显示Dialog
        centerMenuDialog.show();
    }
}

弹窗类:

/**
 * Created by zhenqi
 * 中心弹窗类
 */

public class CenterMenuDialog {
    AlertDialog.Builder builder;

    List<Menu> menuList=new ArrayList<>();

    public void addMenu(Menu menu) {
        menuList.add(menu);
    }
    public CenterMenuDialog(Context context){
        builder = new AlertDialog.Builder(context);
        builder.setCancelable(true);
    }

    public void show(){
        String arr[]=new String[menuList.size()];
        for (int i = 0; i < menuList.size(); i++) {
            arr[i]=menuList.get(i).caption;
        }
        builder.setItems(arr, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Menu menu=menuList.get(i);
                if(menu.menuCommand!=null){
                    menu.menuCommand.onClick();
                }
            }
        });
        builder.create().show();
    }
}

菜单类:

/**
 * Created by zhenqi
 * 自定义菜单类
 */

public class Menu {
    public int resourceId;
    public String caption;
    public MenuCommand menuCommand;

    public static class Builder {
        int resourceId;
        String caption;
        MenuCommand menuCommand;
        public Builder setResourceId(int resourceId){
            this.resourceId=resourceId;
            return this;
        }
        public Builder setCaption(String caption){
            this.caption=caption;
            return this;
        }
        public Builder setMenuCommand(MenuCommand menuCommand){
            this.menuCommand=menuCommand;
            return this;
        }
        public Menu build(){
            Menu menu=new Menu();
            menu.resourceId=resourceId;
            menu.menuCommand=menuCommand;
            menu.caption=caption;
            return menu;
        }
    }
}

接口

/**
 * Created by zhenqi
 */

public interface MenuCommand {
    void onClick();
}

Demo地址,点击下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值