2012年10月11日木曜日

Android TextView で文字列を選択する

Android 3.0 (API Level 11) から文字列選択の API がちょっとかわって、TextView でも(EditText でなくても)文字列選択を簡単に実装できるようになりました。

android:textIsSelectable 属性

もしくは

setTextIsSelectable() メソッド

を使います。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="This is an Android Phone!" android:textIsSelectable="true" /> </RelativeLayout> 編集できないので、ActionMode には「全体を選択」と「コピー」しか出てきません。



setTextIsSelectable() の中をみるとこんな感じです。 4650 public void setTextIsSelectable(boolean selectable) { 4651 if (mTextIsSelectable == selectable) return; 4652 4653 mTextIsSelectable = selectable; 4654 4655 setFocusableInTouchMode(selectable); 4656 setFocusable(selectable); 4657 setClickable(selectable); 4658 setLongClickable(selectable); 4659 4660 // mInputType is already EditorInfo.TYPE_NULL and mInput is null; 4661 4662 setMovementMethod(selectable ? ArrowKeyMovementMethod.getInstance() : null); 4663 setText(getText(), selectable ? BufferType.SPANNABLE : BufferType.NORMAL); 4664 4665 // Called by setText above, but safer in case of future code changes 4666 prepareCursorControllers(); 4667 } Android 3.0 から mTextIsSelectable というフィールドが新しく追加されています。
mTextIsSelectable はデフォルトでは false になっています。もちろん EditText でも false ですが、こちらは別の条件でテキスト選択が開始されます(具体的には editable かどうか)。
結構 2.3 のときと TextView のコード変わってて、なかなか面白いです。



0 件のコメント:

コメントを投稿