2013-02-26 18 views
7

Ben ActionMode.Callback kullanıyorum seçilen metin üzerinde bir dinleyici kurmak ama seni düşünüyorum örneknasıl TextView

enter image description here

cevap

2

için ... Metin seçildiği tamamladığında bilmek gerekir yanıtı burada bulabilirsiniz:

Android Text Selection Listener

burada aradığınız anahtar terim, araştırmanızda size yardımcı olmak için, olduğunu Hedefinizin petek veya daha yeni olması koşuluyla.

API docs (içeriksel eylem modunu kullanarak" na inin)

Eğer kullanımlarına en büyük engel olan için aradığınızı bulmak bir kez açıklayan şeylerden bir ok bir iş yapmak, ama temelde neyi

  1. (android:textIsSelectable="true" veya setTextIsSelectable(true);
  2. ActionMode.Callback arabirimini uygular ve kendi menü öğelerini sağlamak seçilebilir olmasını EditText set
  3. : yapmanız gereken gidiyoruz budur.

NOT: Yukarıda belirtildiği gibi, bu yalnızca API düzeyi 11+ için çalışır. , daha önceki platformları hedefliyorsanız, numaralı metin için olayları almak çok daha karmaşıktır. .xml içinde

1

:

textview.setCustomSelectionActionModeCallback(new callback(textview)); 
... 
public class callback implements Callback { 

    private TextView mTextView; 

    public callback(TextView text) { 
     this.mTextView = text; 

    } 

    @Override 
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) { 
     int start = mTextView.getSelectionStart(); 
     int end = mTextView.getSelectionEnd(); 
     Spannable wordtoSpan = (Spannable) mTextView.getText(); 

     switch (item.getItemId()) { 

     case R.id.item_blue: 
      wordtoSpan.setSpan(new BackgroundColorSpan(Color.BLUE), start 
        , end, 
        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

     singlenton.getInstance().getDatabase().createMarkText(mTextView,Color.BLUE); 
      return true; 

     case R.id.item_green: 
      wordtoSpan.setSpan(new BackgroundColorSpan(Color.GREEN), start, end, 
        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
      singlenton.getInstance().getDatabase().createMarkText(mTextView,Color.GREEN); 
      return true; 

     case R.id.item_red: 
      wordtoSpan.setSpan(new BackgroundColorSpan(Color.RED), start, end, 
        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
      singlenton.getInstance().getDatabase().createMarkText(mTextView,Color.RED); 
      return true; 
     case R.id.item_yellow: 
      wordtoSpan.setSpan(new BackgroundColorSpan(Color.YELLOW), start, end, 
        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
      singlenton.getInstance().getDatabase().createMarkText(mTextView,Color.YELLOW); 
      return true; 
     case R.id.item_erase: 
      wordtoSpan.setSpan(new BackgroundColorSpan(Color.TRANSPARENT), start, end, 
        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
      singlenton.getInstance().getDatabase().createMarkText(mTextView,Color.TRANSPARENT); 
      return true; 
     } 
     return false; 
    } 

    @Override 
    public boolean onCreateActionMode(ActionMode mode, Menu menu) { 
     mode.setTitle("Selecione a cor"); 
     mode.getMenuInflater().inflate(R.menu.menu_text_context, menu); 

     return true; 
    } 

    @Override 
    public void onDestroyActionMode(ActionMode mode) { 

    } 

    @Override 
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) { 
     menu.removeItem(android.R.id.selectAll); 
     // Remove the "cut" option 
     menu.removeItem(android.R.id.cut); 
     // Remove the "copy all" option 
     menu.removeItem(android.R.id.copy); 
     return true; 
    } 

} 
: .class içinde

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textIsSelectable="true" />