How to set up a listener on the selected text in TextView
I am using ActionMode.Callback but I need to know when the text has finished being selected... for example
I think you can find your answer here:
Android Text Selection Listener
The key term you're looking for here, to help you with your research, is ActionMode
, provided that your target is honeycomb or newer.
The API docs (scroll down to "using the contextual action mode) do an ok job of explaining things, once you find what you're looking for, which is the biggest barrier to their use, but basically what you're going to need to do is this:
EditText
to be selectable ( android:textIsSelectable="true"
or setTextIsSelectable(true);
ActionMode.Callback
interface and provide your own menu items. NOTE: as mentioned above, this only works for API level 11+. If you're targeting earlier platforms, getting the events for text selection is much more complicated.
in .xml:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textIsSelectable="true" />
in .class:
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;
}
}
链接地址: http://www.djcxy.com/p/11842.html
上一篇: Logcat错误