본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] Custom Text Selection Actions

by 돼지왕 왕돼지 2020. 8. 3.
반응형


android Custom Text Selection Actions

https://medium.com/google-developers/custom-text-selection-actions-with-action-process-text-191f792d2999?linkId=20000023


-

MOS 부터 floating text selection toolbar 가 나타났다.

여기에 ACTION_PROCESS_TEXT 를 이용해서 어떤 앱이든 custom action 을 추가할 수 있게 되었다.



-

일반적인 TextView 와 EditText 에 쉽게 추가할 수 있다.

EditText 의 경우는 id 가 있어야 하며, AppCompatActivity 를 사용할 경우 getDelegate().setHandleNativeActionModesEnabled(false) 를 호출해주어야 한다.



-

Custom action 의 communication 은 Intent 를 통해 하기 때문에, 이 기능을 사용하려면 Activity 를 아래와 같은 intent-filter 와 함께 정의해주어야 한다.

기능을 여러 개 추가하려면 각각의 Activity 가 필요하다.

<activity

    android:name=".ProcessTextActivity"

    android:label=“@string/process_text_action_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>


여기서 “주의!!” 할 것은 android:label 로 주어진 것이 custom action 으로 등장한다.

exported=“false” 를 줄 경우 노출은 되지만 실제 접근할때 SecurityException 이 난다.



-

Activity 가 수행될 때 Intent.EXTRA_PROCESS_TEXT 로 CharSequence 가 넘어온다

CharSequence 가 넘어온다는 것은 String 이 아니라 Spannable 등도 올 수 있음에 주의해야 한다.



-

launchMode=“singleTop” 일 경우 onNewIntent() 를 handling 해야 한다는 것도 주의하자.



-

EXTRA_PROCESS_TEXT_READONLY 값도 전해진다.

이 녀석은 boolean 값으로 selected text 가 readonly 인지 (예를 들면 TextView 가 true EditText 가 false ) 가 전달된다.



-

결과 전달은 역시 EXTRA_PROCESS_TEXT 로 하며, setResult 를 통해 전달한다.



-

이렇게 설정한 앱이 설치되기만 하면 특별한 설정을 하지 않은 TextView 와 EditText 에서 해당 옵션이 노출된다.



-

끝!!





반응형

댓글