公式中的制表符键盘键
Posted
技术标签:
【中文标题】公式中的制表符键盘键【英文标题】:Tabulator keyboard key in a formulary 【发布时间】:2013-06-12 02:02:10 【问题描述】:说真的,没有人知道如何做到这一点?这甚至可能吗?也许是或否的答案可以帮助我!
我有一个如下所示的表单:
上面带有 B 的矩形表示按钮。其他字段是编辑文本和文本视图。
我希望能够按 Tabulator 键盘并专注于这个方向:
第一个名字编辑文本 第二公司编辑文本 第三个按钮 第四名员工编辑文本 第五个按钮 第 6 天 第 7 个按钮 第八次 第九个按钮 第十个描述编辑文本 第 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_
android:layout_
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_
android:layout_
android:layout_weight="1"
android:inputType="textCapSentences" >
</EditText>
</LinearLayout>
<!--______________________________ Section: form, fields: company,employee____________________-->
<TableLayout
android:layout_
android:layout_
android:layout_gravity="center"
android:padding="3dip"
android:stretchColumns="1,4" >
<TableRow
android:layout_
android:layout_ >
<TextView
android:id="@+id/textViewCompany"
style="@style/FForm"
android:text="@string/company" />
<AutoCompleteTextView
android:id="@+id/autocompleteCompany" />
<ImageButton
android:id="@+id/imageButtonWatchCompany"
android:layout_
android:layout_
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_
android:layout_
android:src="@android:drawable/ic_menu_view"
android:contentDescription="@string/see_employee"/>
</TableRow>
<!--____________________ Section: form, fields: date, time______________________________-->
<TableRow
android:layout_
android:layout_ >
<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_
android:layout_
android:orientation="horizontal">
<TextView
android:id="@+id/textViewDescription"
style="@style/FForm"
android:text="@string/description" />
<EditText
android:id="@+id/editTextDescription"
android:layout_
android:layout_
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_
android:layout_
android:text="@string/mark_as_done"/>
<!--____________________ Section: buttons: save and clean______________________________-->
<TableLayout
android:layout_
android:layout_
android:layout_gravity="center"
android:padding="3dip"
android:stretchColumns="0,1">
<TableRow
android:layout_
android:layout_
tools:ignore="UselessParent" >
<Button
android:id="@+id/buttonSave"
android:layout_
android:layout_
android:text="@string/save" />
<Button
android:id="@+id/buttonClean"
android:layout_
android:layout_
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);
使用这部分代码,使用 tab 键,我可以从 name,然后是 company,然后是第一个按钮,然后是员工。
【问题讨论】:
【参考方案1】:您可以覆盖 Activity 的 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"
【讨论】:
我确信这会奏效,但我有几种形式,而且我正在使用片段。所以这个方法我可以从调用其他片段/表单的主要活动中覆盖它。所以,如果我尝试这个:s,代码会非常难看。您如何看待 mattgmg1990 方法?我想这更优雅,但我不能让我的按钮集中。或者也许我对你的方法有误?感谢您的帮助:)。【参考方案2】:在您的 xml 布局中,您应该能够为每个元素设置 android:imeOptions="actionNext"
标签。这应该使软键盘显示一个下一个按钮,将焦点移到下一个框或按钮。
您可能希望将保存按钮设置为android:imeOptions="actionDone"
,以便用户可以通过保存来完成表单。
编辑:这个 *** 答案描述了如何将焦点设置到按钮并帮助 OP 解决问题:https://***.com/a/3234884/815679
【讨论】:
终于有人回答了。谢谢。我做了你提到的,但它不适用于按钮。实际上,我在 Eclipse 中收到一条警告,上面写着“用于可编辑文本小部件”。并且员工编辑文本永远不是焦点,因为焦点从上到下,没有从左到右。还有其他线索吗?。 啊,好吧,我没有意识到它不能用在按钮上。android:nextFocusDown
或android:nextFocusRight
呢?我以前没有使用过这些,但文档表明它们可能有助于在用户按下 tab 或 next 时将焦点转移到您的预期方向。
好的,使用 android:nextFocusRight 和 android:imeOptions="actionNext" 我有部分所需的焦点。我的意思是,我可以从公司转到员工,但我不能让我的按钮集中。我正在尝试这个:etCompany.setNextFocusRightId(R.id.imageButton1);在我的布局中:
尝试将etCompany.setNextFocusRightId(R.id.imageButton1);
更改为etCompany.setNextFocusDownId(R.id.imageButton1);
。我认为“下一步”按钮将触发 focusDown 而不是 focusRight。
这太糟糕了。是的,我相信是的。查看这个答案,有人以编程方式将焦点设置为按钮:***.com/a/3234884/815679以上是关于公式中的制表符键盘键的主要内容,如果未能解决你的问题,请参考以下文章