【发布时间】:2013-02-18 23:40:48
【问题描述】:
背景
假设您有多个 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 键?
【问题讨论】:
-
您解决了这个问题吗?我也面临同样的问题。如果可能,请分享您的解决方案。
-
@h4ck3d 我忘记了这个。看看我制作的旧代码,似乎我只是使用了 android:singleLine="true" 。只有我看到我有没有 singleLine 的“actionNext”的地方是:github.com/AndroidDeveloperLB/ChipsLibrary,但大部分项目都是基于谷歌的库,所以我不知道这个功能是如何(甚至是否)在那里工作的。我没有时间去挖掘它,但是如果你了解那里发生的事情并发现它有助于回答这个问题,请发布它......
标签: android focus android-edittext android-softkeyboard multiline