我的Android应用程序具有以下布局:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="viewModel"
type="org.myorganization.MyViewModel" />
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:focusableInTouchMode="true"
android:animateLayoutChanges="true">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:textSize="18sp" />
<TableRow
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp" />
<TextView
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_marginStart="8dp"
android:layout_weight="0.3"
android:gravity="center"
android:textAlignment="center"
android:textSize="18sp" />
<EditText
android:id="@+id/editText01"
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="1"
android:inputType="numberDecimal|numberSigned"
android:textAlignment="center" />
<TextView
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="0.2"
android:text="\u00B0"
android:textSize="24sp" />
<EditText
android:id="@+id/editText02"
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="1"
android:inputType="number"
android:textAlignment="center" />
<TextView
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="0.1"
android:text="'"
android:textSize="24sp" />
<EditText
android:id="@+id/editText03"
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="1"
android:inputType="number"
android:textAlignment="center" />
<TextView
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="0.1"
android:text='\"'
android:textSize="24sp" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp" />
<TextView
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_marginStart="8dp"
android:layout_weight="0.3"
android:gravity="center"
android:textAlignment="center"
android:textSize="18sp" />
<EditText
android:id="@+id/editText04"
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="1"
android:enabled="true"
android:inputType="numberDecimal|numberSigned"
android:textAlignment="center" />
<TextView
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="0.2"
android:text="\u00B0"
android:textSize="24sp" />
<EditText
android:id="@+id/editText05"
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="1"
android:inputType="number"
android:textAlignment="center" />
<TextView
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="0.1"
android:text="'"
android:textSize="24sp" />
<EditText
android:id="@+id/editText06"
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="1"
android:inputType="number"
android:textAlignment="center" />
<TextView
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="0.1"
android:text='\"'
android:textSize="24sp" />
</TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:textSize="16sp" />
<EditText
android:id="@+id/editTextExternal"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:gravity="top"
android:inputType="textMultiLine"
android:maxLength="150" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal">
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_marginStart="16dp"
android:layout_marginBottom="16dp"
android:layout_weight="1"
android:text="Cancel" />
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
android:layout_weight="1"
android:text="Save" />
</LinearLayout>
</RelativeLayout>
</layout>
我希望能够以编程方式(即从Java代码中)从一个EditText字段移至另一个字段,但是我不知道该怎么做。我已经尝试了许多变体:
EditText editText = findViewById(editText01,2,3,4,5,6);
editText.focusSearch(FOCUS_RIGHT, FOCUS_LEFT, FOCUS_UP, FOCUS_DOWN);
editText.setFocusable();
editText.getFocusable();
editText.setFocusable(editText.getNextFocusForwardId());
...
甚至:
editText.focusSearch(FOCUS_FORWARD);
出于某些原因,AndroidStudio不允许我这样做。
我要尝试的是模拟键盘并复制“下一步”按钮。我使用了 HERE
找到的教程那么,如何在Android中以编程方式将焦点从一个EditText字段更改为下一个EditText字段?
编辑:
这是我用于EditText.requestFocus()
解决方案的代码:
private View.OnFocusChangeListener fieldFocusListener = new View.OnFocusChangeListener()
{
@Override
public void onFocusChange(View view, boolean isFocused)
{
if (isFocused)
{
int nextField = 0;
EditText[] editTexts = {findViewById(R.id.editText01), findViewById(R.id.editText02), findViewById(R.id.editText03), findViewById(R.id.editText04), findViewById(R.id.editText05), findViewById(R.id.editText06)};
EditText editText = findViewById(view.getId());
for (int i = 0; i < editTexts.length; i++)
{
if (editTexts[i] == editText)
binding.customKeybaordLayout.setFocusedField(editTexts[(i != (editTexts.length - 1)) ? (i + 1) : 0]);
}
}
}
};
答案 0 :(得分:2)
使用editText.requestFocus();
转到所需的editText,
然后使用以下代码打开键盘:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
您可以使用以下代码强制打开键盘:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
您必须在XML中设置android:nextFocusDown
,并在此之后设置要聚焦的EditText
。
之后,您需要使用以下代码获取下一个可聚焦的EditText / View:
EditText nextEditText = (EditText)currentEditText.focusSearch(View.FOCUS_DOWN);
nextEditText.requestFocus();
答案 1 :(得分:1)
您必须使用editText.requestFocus();