背景
假设您有多个 EditText 实例。
您希望能够使用键盘的下一个按钮(用作 ENTER 键的替代品)在它们之间切换。
每个 EditText 可能有很长的内容,可以显示在多行中(假设我希望将其限制为 3 行,如果文本仍然太长,请使用 ellipsize)。
问题
正如我所注意到的,TextView 和 EditText 都有非常奇怪的行为并且缺乏一些基本功能。其中之一是,如果您希望转到下一个视图,则需要为每个 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 键?