精品久久看,欧美成人久久一级c片免费,日本加勒比在线精品视频,国产一区二区三区免费大片天美,国产成人精品999在线,97理论三级九七午夜在线观看

當前位置: 首頁IT技術 → 自定義可復制的textview

自定義可復制的textview

更多

  最近準備寫一款閱讀相關的應用,希望內部的文字都可以實現完整的可復制性,這對于信息分享的而言至關重要。類似人人網客戶端那樣內部文字完全不可復制,信息只能在站內共享的方式讓我很郁悶,所以我就想來實現一個類似uc網頁頁面內容皆可復制的textview。

  在仔細看了一段時間textview和edittext的代碼之后,我發現其實如果要求不高的話,我們完全可以在edittext的基礎上來實現一個符合我所述要求的textview。具體實現過程不難,有兩大主要問題點。

  首先 ,edittext已經很好的實現了相關文本復制的操作,但是我希望不能在其內部輸入文字,不能對內部的文字進行刪減。

  其次,我們需要解決edittext游標cursor的問題,使其在我們需要的時候出現,不需要的時候gone去一邊。

  第一個問題很簡單,我們只需要在應用到該edittext的地方屬性android: seteditable=”false”就可以了。關鍵難點在于第二點,我們如果想當然地認為只要設置setCursorVisible=”false”就能滿足需求的話就大錯特錯了。我們需要清晰地了解cursor什么時候會出現,什么時候不會消失。

  實際測試過程我發現edittext中的代碼量很少,大部分的功能其實都在textview中被實現了,而導致,導致我們在長按edittext時彈出復制剪切選擇框的關鍵方法如下:

  View Code

  1 @Override

  2 protected MovementMethod getDefaultMovementMethod() {

  3 // TODO Auto-generated method stub

  4 return super.getDefaultMovementMethod();

  5 }

  樹藤摸瓜,我們可以看到與復制相關的幾個關鍵類是:

  ArrowKeyMovementMethod和Selection。

  當然純粹為了實現我這兒的功能的話這兩個類都暫時不用去動。

  我們只需要重寫幾個edittext里的方法就可以,具體代碼如下:

  View Code

   1 package com.hebin.activity;

   2 3 import android.content.Context;

   4 import android.text.Selection;

   5 import android.text.method.MovementMethod;

   6 import android.util.AttributeSet;

   7 import android.view.ContextMenu;

   8 import android.view.KeyEvent;

   9 import android.view.MotionEvent;

  10 import android.widget.EditText;

  11 12 /**

  13 * @author heb

  14 * @class_name MyTextView.java

  15 * @date 2012-3-22

  16 */

  17 public class MyTextView extends EditText {

  18 19 public MyTextView(Context context, AttributeSet attrs) {

  20 super(context, attrs);

  21 }

  22 23 // 長按彈出文本選擇框menu的關鍵方法:可以選擇復制、剪切等等功能,視該textview的具體實現而定

  24 // 如果希望不彈出這個menu界面,只要把這個方法返回空就ok

  25 @Override

  26 protected MovementMethod getDefaultMovementMethod() {

  27 // TODO Auto-generated method stub

  28 return super.getDefaultMovementMethod();

  29 }

  30 31 // 點擊menu中的選定item的具體處理方法,捕捉點擊文本復制、剪切等按鈕的動作

  32 // 如果要在點擊復制按鈕之后取消該textview的cursor可見性的具體監聽寫在這里

  33 @Override

  34 public boolean onTextContextMenuItem(int id) {

  35 setCursorVisible(true);

  36 boolean flag;

  37 if (id != android.R.id.switchInputMethod) {

  38 flag = super.onTextContextMenuItem(id);

  39 } else {

  40 setCursorVisible(false);

  41 return false;

  42 }

  43 if (id == android.R.id.copy) {

  44 setCursorVisible(false);

  45 }

  46 return flag;

  47 }

  48 49 @Override

  50 protected void onCreateContextMenu(ContextMenu menu) {

  51 super.onCreateContextMenu(menu);

  52 if (isInputMethodTarget()) {

  53 menu.removeItem(android.R.id.switchInputMethod);

  54 }

  55 }

  56 57 // textview的點擊捕捉

  58 // 如果雙擊textview選中了具體文字,則使cursor可見

  59 int cursorStart = -1;

  60 61 @Override

  62 public boolean onTouchEvent(MotionEvent event) {

  63 boolean flag = super.onTouchEvent(event);

  64 if (event.getAction() == MotionEvent.ACTION_DOWN && hasSelection()) {

  65 if (cursorStart == -1) {// 由于點擊選中文字后,再點擊其他位置,第一次點擊時顯示的hasSelection依然為true,這樣一來cursor會依然還在,為了避免這種情況,我這里多對selectionStart進行了一次驗證66

   setCursorVisible(true);

  67 cursorStart = getSelectionStart();

  68 } else {

  69 setCursorVisible(false);

  70 cursorStart = -1;

  71 }

  72 }

  73 return flag;

  74 }75

  76 // 當按返回鍵取消文字復制時,使cursor再次不可見

  77 @Override

  78 public boolean onKeyDown(int keyCode, KeyEvent event) {

  79 boolean flag = super.onKeyDown(keyCode, event);

  80 if (!hasSelection()) {

  81 setCursorVisible(false);

  82 cursorStart = -1;

  83 }

  84 return flag;

  85 }

  86 87 }

   1 package com.hebin.activity;

   2 3 import android.content.Context;

   4 import android.text.Selection;

   5 import android.text.method.MovementMethod;

   6 import android.util.AttributeSet;

   7 import android.view.ContextMenu;

   8 import android.view.KeyEvent;

   9 import android.view.MotionEvent;

  10 import android.widget.EditText;

  11 12 /**

  13 * @author heb

  14 * @class_name MyTextView.java

  15 * @date 2012-3-22

  16 */

  17 public class MyTextView extends EditText {

  18 19 public MyTextView(Context context, AttributeSet attrs) {

  20 super(context, attrs);

  21 }

  22 23 //長按彈出文本選擇框menu的關鍵方法:可以選擇復制、剪切等等功能,視該textview的具體實現而定

  24 //如果希望不彈出這個menu界面,只要把這個方法返回空就ok

  25 @Override

  26 protected MovementMethod getDefaultMovementMethod() {

  27 // TODO Auto-generated method stub

  28 return super.getDefaultMovementMethod();

  29 }

  30 //點擊menu中的選定item的具體處理方法,捕捉點擊文本復制、剪切等按鈕的動作

  31 //如果要在點擊復制按鈕之后取消該textview的cursor可見性的具體監聽寫在這里

  32 @Override

  33 public boolean onTextContextMenuItem(int id) {

  34 setCursorVisible(true);

  35 boolean flag;

  36 if(id!=android.R.id.switchInputMethod){

  37 flag =super.onTextContextMenuItem(id);

  38 }else{

  39 setCursorVisible(false);

  40 return false;

  41 }

  42 if(id==android.R.id.copy){

  43 setCursorVisible(false);

  44 }

  45 return flag;

  46 }

  47 @Override

  48 protected void onCreateContextMenu(ContextMenu menu) {

  49 super.onCreateContextMenu(menu);

  50 if (isInputMethodTarget()) {

  51 menu.removeItem(android.R.id.switchInputMethod);

  52 }

  53 }

  54 55 //textview的點擊捕捉

  56 //如果雙擊textview選中了具體文字,則使cursor可見

  57 int cursorStart=-1;

  58 @Override

  59 public boolean onTouchEvent(MotionEvent event) {

  60 boolean flag = super.onTouchEvent(event);

  61 if(event.getAction()==MotionEvent.ACTION_DOWN&&hasSelection()){

  62 if(cursorStart==-1){//由于點擊選中文字后,再點擊其他位置,第一次點擊時顯示的hasSelection依然為true,這樣一來cursor會依然還在,為了避免這種情況,我這里多對selectionStart進行了一次驗證63

  setCursorVisible(true);

  64 cursorStart=getSelectionStart();

  65 }else{

  66 setCursorVisible(false);

  67 cursorStart=-1;

  68 }

  69 }

   70 return flag;

  71 }

  72 //當按返回鍵取消文字復制時,使cursor再次不可見

  73 @Override

  74 public boolean onKeyDown(int keyCode, KeyEvent event) {

  75 boolean flag =super.onKeyDown(keyCode, event);

  76 if(!hasSelection()){

  77 setCursorVisible(false);

  78 }

  79 return flag;

  80 }81

  82 83 }

熱門評論
最新評論
昵稱:
表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
字數: 0/500 (您的評論需要經過審核才能顯示)
主站蜘蛛池模板: 男女在线网站 | 九色97| 日本一区不卡视频 | 精品视频免费在线观看 | 亚洲国产成人在人网站天堂 | 日本一区二区三区久久 | 国产成人夜色91 | 日韩在线视频一区 | 国产精品va欧美精品 | 国产精品福利一区二区久久 | 国产精品久久久精品视频 | 国内精品久久久久影院亚洲 | 欧美一级视 | 国产成人精品综合网站 | 福利体验区试看5次专区 | 第四色奇米影视 | 日韩欧美亚洲综合 | 国产亚洲一级精品久久 | 欧美国产一区二区三区 | 妻色成人网 | 久久98| 婷婷成人丁香五月综合激情 | 深爱开心激情网 | 国产成人片 | 精品久久久中文字幕一区 | 国产欧美一区视频在线观看 | 日本四虎影院 | 久久99精品亚洲热综合 | 免费人成在线蜜桃视频 | 五月天视频网站 | 国产欧美一区二区成人影院 | 欧美一区二区三区在线观看 | 欧美日韩在线亚洲国产人 | 高清性色生活片欧美在线 | 黄色视屏在线免费观看 | 欧美一级网 | 97香蕉| 久久精品九九 | 久久人人插 | 国产伦码精品一区二区三区 | 看全免费的一级毛片 |