[Android] TextView長按複製實現方法小結(轉載),androidtextview
這是別人寫的,既然別人總結過了,那我就不花時間研究這個了,但往後會補充一些使用經驗之類的
原文地址:http://blog.csdn.net/stzy00/article/details/41477813
本文地址:http://www.cnblogs.com/rossoneri/p/4432499.html
有這麼一個需求,使用者在瀏覽文本資訊時希望長按資訊就能彈出複製的選項方便儲存或者在別的頁面使用這些資訊.類似的, 就像長按WebView或者EditText的內容就自動彈出複製選項. 這裡面主要是2個特點: 1,使用者只能瀏覽文本資訊而不能編輯這些文本資訊; 2,使用者對著文本資訊長時間點按可以彈出"複製" 選項實現複製; 網上有好多種方法可實現,也比較零散, 此處做個小結,希望有所協助.
通過繼承EditText,自訂TextView
public class NewTextView extends EditText { public NewTextView(Context context) { super(context); // TODO Auto-generated constructor stub } public NewTextView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } public NewTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub } @Override protected boolean getDefaultEditable() {//禁止EditText被編輯 return false; } }
上面很關鍵的一個方法是getDefaultEditable(), return false;即禁止EditText被編輯,變成了不可編輯的EditText, 但同時具有EditText的長按複製功能. 更進一步的,如果查看EditText源碼, 就發現源碼中有一個方法 protected void onCreateContextMenu(ContextMenu menu) 控制了EditText長按彈出的操作功能表, 可以自訂這個方法且實現為空白protected void onCreateContextMenu(ContextMenu menu){ } .然後在onTouchEvent事件中攔截處理自訂的點按事件, 彈出自訂的菜單. 原理如上, 更直白簡單的方法是直接在xml中使用一個EditText, 並且將屬性設定為 android:editable="false" .
使用OnLongClickListener
直接使用TextView, 然後在代碼裡給TextView添加OnLongClickListener事件,長按時彈出自訂 "複製" 菜單(比如結合 PopupWindow做快顯功能表). 點擊"複製" 就去擷取TextView的內容.
當然, 這裡只是擷取內容, 如何將內容放入粘貼管理器還需要一個ClipboardManager 對象.它負責管理複製後粘貼的這件事.
ClipboardManager cmb = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); cmb.setText(content.trim()); //將內容放入粘貼管理器,在別的地方長按選擇"粘貼"即可 cm.getText();//擷取粘貼資訊
使用setTextIsSelectable()方法
代碼中直接對TextView使用setTextIsSelectable()方法,將TextView設定成可點按選擇的即可.
TextView tv = new TextView(context); tv.setTextIsSelectable(true);
上面就是常見的長按文本資訊彈出"複製"菜單的一些方法小結了,希望對大家有所協助.