読者です 読者をやめる 読者になる 読者になる

【Android】選択された文字を加工(ActionMode)

 

選択した文字に対して、コピー、共有、翻訳などのメニューを表示するやり方です。

 

ActionModeを使います。

 

ActionModeは、EditTextやTextViewを長押しすると表示されるメニューのことです。

 

まずはActionModeのイメージです。

 

 

f:id:stanleyblenz:20161007003745p:plain

 

 

単語を長押しすると以下のようなメニューが表示されます。

 

 

f:id:stanleyblenz:20161007003802p:plain

 

 

コピーを選択すればコピーできますし、共有を選択すれば共有メニューが表示されます。

 

 

f:id:stanleyblenz:20161007003827p:plain

 

 

メニューはいろいろあるのですが、

私がよく使用するのは、翻訳です。 

英語のアプリをつくったりすることがあるので。

 

 

f:id:stanleyblenz:20161007003844p:plain

 

 

翻訳を選択すれば以下のGooggel Translate の画面が表示されます。

 

 

f:id:stanleyblenz:20161007010019p:plain

 

 

 

■ソースです

 

<TextView

  android:id="@+id/text1"
  android:textIsSelectable="true"
  android:text="@string/hello_world"
  android:textSize="24dp"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"/>

 

public class MainActivity extends Activity implements ActionMode.Callback {

   @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);

         TextView tv = (TextView)findViewById(R.id.text1);
         tv.setCustomSelectionActionModeCallback(this);
     }
     @Override
     public boolean onCreateActionMode(ActionMode mode, Menu menu) {
         //ActionModeが表示される時

         ↓↓↓メニューに表示したくない場合
         // menu.removeItem(android.R.id.copy);//コピーの削除
         // menu.removeItem(android.R.id.shareText);//共有の削除
         // menu.removeItem(android.R.id.summary);//入りきらない場合のメニューの削除
        return true;//trueを返さないとその後動かない
     }
     @Override
     public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
         //onCreateActionMode後
         return false;
      }
     @Override
     public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
         //メニューをクリックした時
         return false;//falseにしないと「すべて選択」した際にすべてが選択されない
     }
     @Override
     public void onDestroyActionMode(ActionMode mode) {
         //ActionModeが閉じた時
      }
}