<< Android-Note
EditTextでコピー・貼り付けを感知する方法
EditTextでコピーや貼り付けが行われたことを感知するリスナーを作成する方法をここでは簡単に紹介します。
EditTextの拡張
まずはEditTextを拡張してコピー、貼り付け、切り取りを感知するリスナーをEditText内に作ります。
ここではAdvancedEditTextという名前で次のコードのようにEditTextを拡張します。
import android.content.Context; import android.util.AttributeSet; import android.widget.EditText; /** コピー・貼り付け・切り取りを感知するEditText */ public class AdvancedEditText extends EditText { public AdvancedEditText(Context context) { super(context); } public AdvancedEditText(Context context, AttributeSet attrs) { super(context, attrs); } public AdvancedEditText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public boolean onTextContextMenuItem(int id) { switch (id){ case android.R.id.cut: /** コピーされたとき */ if(menuListener != null) menuListener.onCut(); break; case android.R.id.paste: /** 貼り付けされたとき */ if(menuListener != null) menuListener.onPaste(); break; case android.R.id.copy: /** 切り取りされたとき */ if(menuListener != null) menuListener.onCopy(); break; } return super.onTextContextMenuItem(id); } public void setOnContextMenuListener(OnContextMenuListener listener) { this.menuListener = listener; } /** コピー・貼り付け・切り取りを感知するリスナー */ public interface OnContextMenuListener { public void onCopy(); public void onPaste(); public void onCut(); } }
OnContextMenuListenerというリスナーを作り、onTextContextMenuItemメソッドでコピー・貼り付け・カットが行われたときに適宜それに応じたメソッドを呼び出しています。
また、リスナーを設定するためにsetOnContextMenuListenerというメソッドも作りました。
使用例
使い方は次のように自作したsetOnContextMenuListenerでリスナーを設定するだけです。
public class MainActivity extends Activity { private final String LOG_TAG = MainActivity.class.getName(); @Override protected void onCreate(Bundle savedInstanceState) { AdvancedEditText editText = new AdvancedEditTetx(this); editText.setOnContextMenuListener( new AdvancedEditText.OnContextMenuListener() { @Override public void onPaste() { Log.i(LOG_TAG, "貼り付け"); } @Override public void onCut() { Log.i(LOG_TAG, "切り取り"); } @Override public void onCopy() { Log.i(LOG_TAG, "コピー"); } }); } }
EditTextにデフォルトでコピーや切り取りを検知するリスナーがあればよかったのですが、ないのでこのように自作するのが良いと思います。
以上がEditTextのコピーや切り取りを感知するためのリスナーの作り方です。では、また!!
© Kaz