LoginSignup
11
6

More than 3 years have passed since last update.

Androidで文字列選択時に表示されるメニューをカスタマイズする

Last updated at Posted at 2019-12-03

こんにちは。当社で2年目を迎えた@knagauchiです。
この記事は弊社の Advent Calender 2019 の 3 日目の記事です。

前日の@irisTa56さんはかなり詳細に書いてくれていますね😁
本日は私が興味あって調べたことのTips的な内容です。短いです。

調べたきっかけ

前回は英語生活中でしたが、来年上海に行く用事ができたので、英語と同時並行で中国語を学び始めました。
とても便利な英中辞書アプリPlecoを使っています。

このようにPlecoには、ブラウザで長押し選択した文字列を翻訳する機能があります。
Google翻訳もそうですよね。

これ、Google以外のアプリでも出来ることを知らなかったので、技術的にどうやって実現するんだろう?と思って調べました。

とても簡単でしたが、Qiitaには載っていなかったので、紹介します。

実装方法

AndroidManifest.xml
<activity android:name=".view.ProcessTextActivity"
        android:label="@string/process_text_name">
    <intent-filter>
        <action android:name="android.intent.action.PROCESS_TEXT" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain"/>
    </intent-filter>
</activity>
ProcessTextActivity.kt
class ProcessTextActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val text = intent.getCharSequenceExtra(Intent.EXTRA_PROCESS_TEXT)?.toString()

        // textを使う
    }
}

これだけです。

動作

実際に動作を見てみましょう。


android:labelで設定した文字列がメニューに表示されるようです。「もらった!」が、設定した文字列:joy:

選択した文字列がアプリで受け取れました。

補足

Intent.EXTRA_PROCESS_TEXTの部分が黄色いのは、minSdkVersionを23未満にしているからです:sweat_smile:
EXTRA_PROCESS_TEXTはAndroid 6.0以上で有効なフラグのようですね。

Google Chrome以外に、SlackやLINEのメッセージ入力欄など、文字列選択ができる多くのアプリに対応できます。

もっと詳しく

以下の記事が参考になります(英語)
Creating custom Text Selection actions with ACTION_PROCESS_TEXT

次回は@keigo1450さんの投稿です。お楽しみに!🤗

11
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
6