6

バックグラウンド

複数の 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 キーの代わりに「次の」キーを表示するものは?

4

2 に答える 2

0

ここでの答えについては、必要に応じて両方を設定できます。ただし、実際に次に表示し、Enter キーを次のキーとして機能させることは、キーボードによって異なります。Swypeでは、複数行のテキストフィールドを意図的にオーバーライドして、常にEnterキーを表示し、改行として機能し、次のキーを表示しないことを知っています. すべてのキーボードでこれを強制的に機能させる方法はありません。

于 2015-04-21T20:28:28.310 に答える