1

说真的,没有人知道如何实现这一目标?这甚至可能吗?也许是或否的答案可以帮助我!

我有一个看起来像这样的表格:

在此处输入图像描述

上面带有 B 的矩形表示按钮。其他字段是编辑文本和文本视图。

我希望能够按 Tabulator 键盘并专注于这个方向:

  • 第一个名字 编辑文本
  • 第二公司 编辑文本
  • 第三个按钮
  • 第四名员工 编辑文本
  • 第 5 个按钮
  • 第六天
  • 第 7 个按钮
  • 第八次
  • 第 9 个按钮
  • 10 描述 编辑文本
  • 第 11 个标记为完成复选框
  • 第 12 次保存
  • 第 13 次清洁

这是我的布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
style="@style/ContenedorPrincipal"
tools:context=".ClientsActivity" >

<TextView
    android:id="@+id/textViewTask"
    style="@style/FTitle"
    android:text="@string/new_task" />


<!--____________________ Section: form, field: name task______________________________-->
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:padding="3dp"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/textViewTaskName"
        style="@style/FForm"
        android:text="@string/name" />

    <EditText
        android:id="@+id/editTextTaskName"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:inputType="textCapSentences" >
    </EditText>

</LinearLayout>

<!--______________________________ Section: form, fields: company,employee____________________-->
<TableLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:padding="3dip"
    android:stretchColumns="1,4" >

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/textViewCompany"
            style="@style/FForm"
            android:text="@string/company" />

        <AutoCompleteTextView 
            android:id="@+id/autocompleteCompany" />

        <ImageButton
            android:id="@+id/imageButtonWatchCompany"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@android:drawable/ic_menu_view" 
            android:contentDescription="@string/see_company"/>

        <TextView
            android:id="@+id/textViewEmployee"
            style="@style/FForm"
            android:text="@string/employee" />

        <AutoCompleteTextView   
            android:id="@+id/autocompleteEmployee" />


        <ImageButton
            android:id="@+id/imageButtonWatchEmployee"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@android:drawable/ic_menu_view" 
            android:contentDescription="@string/see_employee"/>
    </TableRow>

    <!--____________________ Section: form, fields: date, time______________________________-->
    <TableRow
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/textViewDate"
            style="@style/FForm"
            android:text="@string/date" />

        <Button
            android:id="@+id/buttonDate" >
        </Button>
        <TextView />

        <TextView
            android:id="@+id/textViewTime"
            style="@style/FForm"
            android:text="@string/time" />

        <Button
            android:id="@+id/buttonTime">
        </Button>

    </TableRow>
</TableLayout>
<!--____________________ Section: form, field description ______________________________-->
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:orientation="horizontal">

    <TextView
        android:id="@+id/textViewDescription"
        style="@style/FForm"
        android:text="@string/description" />

    <EditText
        android:id="@+id/editTextDescription"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:lines="5"
        android:gravity="top|left"
        android:scrollbars="vertical"
        android:inputType="textMultiLine|textCapSentences"/>
</LinearLayout>

<CheckBox 
    android:id="@+id/checkBoxDone"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/mark_as_done"/>

<!--____________________ Section: buttons: save and clean______________________________-->
 <TableLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:padding="3dip" 
    android:stretchColumns="0,1">

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        tools:ignore="UselessParent"  >

        <Button
            android:id="@+id/buttonSave"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/save" />

       <Button
           android:id="@+id/buttonClean"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="@string/clean" />

    </TableRow>
</TableLayout>

有没有办法做到这一点?任何帮助将不胜感激。

解决方案

在布局中确保使用 android:imeOptions="actionNext":

<AutoCompleteTextView 
            android:id="@+id/autocompleteCompany"
            android:imeOptions="actionNext" />

并以编程方式在 onCreateView 方法中调用个人方法:

private void setUpFocus(View view){
    etName.setNextFocusDownId(R.id.autocompleteCompany);
    etCompany.setNextFocusDownId(R.id.imageButtonWatchCompany);
    ImageButton button = (ImageButton) view.findViewById(R.id.imageButtonWatchCompany);
    button.setFocusableInTouchMode(true);

}

使用这部分代码,使用制表键,我可以从名称,然后是公司,然后是第一个按钮,然后是员工。

4

2 回答 2

1

您可以覆盖活动的 onKeyDown() 方法以显式处理 Tab 键按下,以您想要的任何顺序切换焦点。请记住,如果您使用 imeOptions,您的键码可能会有所不同,在这种情况下,您可以检查这些特定操作(即下一步、完成等)。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

    if (keycode == KeyEvent.KEYCODE_TAB) {
        View currentFocus = getCurrentFocus();

        switch (currentFocus.getId()) {
        case R.id.etName:
            etCompany.requestFocus();
            return true;
        case R.id.etCompany:
            btn3.requestFocus();
            return true;
            ...
        }
    }

    return super.onKeyDown(keyCode, event);
}

此外,请确保您的按钮可聚焦http://developer.android.com/reference/android/view/View.html#attr_android:focusable并且在触摸模式下可聚焦。

android:focusable="true"
android:focusableInTouchMode="true"
于 2013-06-18T20:02:56.417 回答
0

在您的 xml 布局中,您应该能够android:imeOptions="actionNext"为每个元素设置标签。这应该使软键盘显示下一个按钮,将焦点移动到下一个框或按钮。

您可能希望将保存按钮设置为,android:imeOptions="actionDone"以便用户可以通过保存来完成表单。

编辑:这个stackoverflow答案描述了如何将焦点设置为按钮并帮助OP解决问题:https ://stackoverflow.com/a/3234884/815679

于 2013-06-18T18:07:31.087 回答