バックグラウンド
複数の EditText インスタンスがあるとします。
キーボードの次のボタン (ENTER キーの代わりとして使用される) を使用して、それらを切り替えることができるようにしたいと考えています。
各 EditText には、複数行で表示できる長いコンテンツが含まれる場合があります (3 行に制限したいとします。それでもテキストが長すぎる場合は、ellipsize を使用します)。
問題
私が気付いたように、TextView と EditText はどちらも非常に奇妙な動作をしており、いくつかの基本的な機能が欠けています。そのうちの 1 つは、次のビューに移動する場合、EditText インスタンスごとに singleLine="true" が必要です。
私が試したこと
次の xml レイアウト (およびその他の試行) を試しましたが、うまくいきません:
<LinearLayout 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" android:orientation="vertical"
android:gravity="center" tools:context=".MainActivity">
<EditText android:id="@+id/editText1" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:nextFocusDown="@+id/editText2"
android:singleLine="false" android:imeOptions="actionNext"
android:maxLines="3" android:ellipsize="end"
android:text="@string/very_long_text" />
<EditText android:id="@+id/editText2" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:nextFocusDown="@+id/editText3"
android:singleLine="false" android:imeOptions="actionNext"
android:maxLines="3" android:ellipsize="end"
android:text="@string/very_long_text" />
<EditText android:id="@+id/editText3" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:singleLine="false"
android:maxLines="3" android:ellipsize="end"
android:text="@string/very_long_text"/>
</LinearLayout>
次のコードも試してみましたが、本当にばかげた解決策です。
...
final EditText editText=(EditText)findViewById(R.id.editText1);
editText.setOnEditorActionListener(new OnEditorActionListener()
{
@Override
public boolean onEditorAction(final TextView v,final int actionId,final KeyEvent event)
{
if(actionId==EditorInfo.IME_NULL)
{
final View view=findViewById(editText.getNextFocusDownId());
if(view!=null)
{
view.requestFocus();
return true;
}
}
return false;
}
});
それは機能しますが、次の理由からばかげた解決策です。
- 各 EditText ごとにこの動作を設定する必要があります (または EditText を拡張し、そこに何らかのロジックを追加します)。
- ソフトキーボードのキーの「次へ」が表示されません。代わりに、ENTER キーが表示されます。
- XML をいじっても、最後に楕円サイズを設定できず、スクロール動作が続いていました。
質問
これを達成するためのより良い方法はありますか?エレガントで機能し、ENTER キーの代わりに「次の」キーを表示するものは?