如果要實現(xiàn)長按復制文本,那么android是可以支持的帅矗,只要將textview的android:textIsSelectable="true"就可以偎肃。 Edittext繼承textview,因此损晤,软棺,,
查看TextView的API尤勋,里面就有這么一段介紹:
To allow users to copy some or all of the TextView's value and paste it somewhere else, set the XML attributeandroid:textIsSelectableto "true" or callsetTextIsSelectable(true). The textIsSelectable flag allows users to make selection gestures in the TextView, which in turn triggers the system's built-in copy/paste controls.
意思就是使用textIsSelectable屬性就可以觸發(fā)系統(tǒng)內置的復制/粘貼功能喘落。
坑:
但是部分機型涉及到列表和Textview結合的時候,如ListLView內的Textview最冰,RecyclerView中的Textview等瘦棋,在部分機型上面會無法彈出應有的pop。 如紅米note4X 的MIUI8.5暖哨,解決方式是將Textview的android:layout_width設為 MatchParent赌朋。
也有其他需要注意的地方,如viewGroup使用 afterDescendants,不能設置android:descendantFocusability=”blocksDescendants”
beforeDescendants:viewgroup會優(yōu)先其子類控件而獲取到焦點
? ? afterDescendants:viewgroup只有當其子類控件不需要獲取焦點時才獲取焦點
? ? blocksDescendants:viewgroup會覆蓋子類控件而直接獲得焦點沛慢。
但是考慮到不同rom可能不同赡若,建議自己實現(xiàn)復制功能,如下
tvView.setOnLongClickListener(new OnLongClickListener() {
? ? ? ? @Override
? ? ? ? public boolean onLongClick(View v) {
? ? ? ? ? ? ClipboardManager cm =(ClipboardManager)getContext().getSystemService(Context.CLIPBOARD_SERVICE);
? ? ? ? ? ? cm.setText(orderDetailsTvOrderNumber.getText().toString());
? ? ? ? ? ? ? ? ? ?return false;
? ? ? ? }
? ? });
ClipboardManager簡單實用如下:
ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
復制:
?創(chuàng)建一個剪貼數(shù)據(jù)集团甲,包含一個普通文本數(shù)據(jù)條目(需要復制的數(shù)據(jù))
ClipData clipData = ClipData.newPlainText(null,"文本數(shù)據(jù)");
?把數(shù)據(jù)集設置(復制)到剪貼板
clipboard.setPrimaryClip(clipData);
粘貼:
?獲取剪貼板的剪貼數(shù)據(jù)集
ClipData clipData = clipboard.getPrimaryClip();
if (clipData != null && clipData.getItemCount() > 0) {
? CharSequence text = clipData.getItemAt(0).getText();//? 從數(shù)據(jù)集中獲扔舛(已復制)第一條文本數(shù)據(jù)??
? ? System.out.println("Clip text is : " + text);
}
監(jiān)聽:
添加剪貼板數(shù)據(jù)改變監(jiān)聽器
clipboard.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
? ? @Override? ? public void onPrimaryClipChanged() {
? ? ? ? // 剪貼板中的數(shù)據(jù)被改變,此方法將被回調? ? ? ??
? ? }
});
移除指定的剪貼板數(shù)據(jù)改變監(jiān)聽器
?clipboard.removePrimaryClipChangedListener(listener);