私は持っていTextView
ます。ロングクリックすると、ロングクリックが行われたテキストの一部が強調表示され、いくつかの追加オプションを提供するコンテキスト アクション メニューが表示されます。
ただし、テキストが強調表示されている場合、コンテキスト アクション メニューは必要なものとは異なります。一方、目的のコンテキスト アクション メニューが表示されている場合、テキストは強調表示されません。
の関数内のreturn
ステートメントまでゼロにすることができました。具体的には、関数が (クリックを消費する) 場合、コンテキスト アクション メニューが表示されますが、長いクリックがテキスト選択ツールに渡されなかったため、有効になりません。ただし、関数が を返す場合、クリックは関数に渡され、選択されたテキストのデフォルトの動作がトリガーされます。 onLongClick
onLongClickListener
onLongClick
returns true
onLongClick
false
copy + paste
コード:
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
public class HelloTxtView extends Activity {
//private EditText ed;
private TextView ed;
//actionmode callback.
private ActionMode mActionMode;
private ActionMode.Callback mActionModeCallback;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_hello_txt_view);
ed = (TextView) findViewById(R.id.txtview);
ed.setFocusable(true);
ed.setText("Hello World! Let's select some text!!");
initActionModeCallbacks();
ed.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Log.v(this.toString(), "Long click.");
ed.setCursorVisible(true);
Log.v(this.toString(), "Starting actionmodecallback.");
mActionMode = HelloTxtView.this.startActionMode(mActionModeCallback);
v.setSelected(true);
return false;
}
});
}
public void initActionModeCallbacks() {
/*
* This function initializes the callbacks.
*/
mActionModeCallback = new ActionMode.Callback() {
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
//nothing to do here.
Log.v(this.toString(), "Preparing action mode.");
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
Log.v(this.toString(), "Destroy action mode.");
//mActionModeCallback = null;
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
Log.v(this.toString(), "Creating new action mode menu.");
//inflate a new menu.
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.options_menu, menu);
Log.v(this.toString(), "Done inflating menu.");
return true;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
Log.v(this.toString(), "An item was clicked.");
switch(item.getItemId()) {
case R.id.dictLookup:
Log.v(this.toString(), "Look up dictionary.");
break;
case R.id.readFromHere:
Log.v(this.toString(), "Start reading from here:" + ed.getSelectionStart());
}
return false;
}
};
}
}
私の質問:
1. のデフォルトの動作をオーバーライドするにはどうすればよいTextView
ですか?
2. コンテキスト アクション メニューでテキストを選択するにはどうすればよいですか?