Int*_*eXX 88 android android-layout
我喜欢我的UI直观; 每个屏幕应该自然而不引人注目地引导用户进入应用程序的下一步.除此之外,我努力使事情变得混乱和混乱.
开玩笑 :-)
我有三个TableRows,每个包含一个只读和不可聚焦的EditText控件,然后是一个右边的按钮.每个按钮启动相同的活动但具有不同的参数.用户在那里进行选择,子活动结束,EditText用用户的选择填充适当的.
这是经典的级联值机制; 每个选择都会缩小下一个选择的可用选项等.因此,我将禁用每个下一行的两个控件,直到当前行上的EditText包含值.
我需要按照优先顺序做两件事之一:
子活动返回后,问题就出现了; 单击的按钮保持焦点.
回复:上面的#1 - 似乎没有removeFocus()方法或类似的东西
回复:上面的#2 - 我可以requestFocus()用来将焦点设置到下一行的按钮,并且在子活动返回后工作,但由于某种原因,它在父活动中不起作用onCreate().
我需要在任一方向上保持UI一致性 - 子活动完成后没有按钮具有焦点,或者每个按钮根据其在逻辑流程中的位置获得焦点,包括在任何选择之前的第一个(也是唯一的)活动按钮.
act*_*imp 169
正如你所发现的那样使用clearFocus()似乎对我不起作用(在另一个答案的评论中看到),但最终对我有用的是添加:
<LinearLayout
android:id="@+id/my_layout"
android:focusable="true"
android:focusableInTouchMode="true" ...>
Run Code Online (Sandbox Code Playgroud)
到我的顶级布局视图(线性布局).要从所有Buttons/EditTexts等中删除焦点,您可以这样做
LinearLayout myLayout = (LinearLayout) activity.findViewById(R.id.my_layout);
myLayout.requestFocus();
Run Code Online (Sandbox Code Playgroud)
除非我将视图设置为可聚焦,否则请求焦点不会做任何事情.
wil*_*lma 78
老问题,但是当我遇到类似的问题时,我遇到了它,并且认为我会分享我最终做的事情.
获得焦点的视图每次都不同,所以我使用了非常通用的:
View current = getCurrentFocus();
if (current != null) current.clearFocus();
Run Code Online (Sandbox Code Playgroud)
android:descendantFocusability="beforeDescendants"
在活动中使用以下内容以及下面的一些布局选项似乎可以正常工作。
getWindow().getDecorView().findViewById(android.R.id.content).clearFocus();
Run Code Online (Sandbox Code Playgroud)
在根视图上结合以下参数。
<?xml
android:focusable="true"
android:focusableInTouchMode="true"
android:descendantFocusability="beforeDescendants" />
Run Code Online (Sandbox Code Playgroud)
https://developer.android.com/reference/android/view/ViewGroup#attr_android:descendantFocusability
回答感谢:https : //forums.xamarin.com/discussion/1856/how-to-disable-auto-focus-on-edit-text
关于windowSoftInputMode
还有另一点需要注意。默认情况下,Android会自动将初始焦点分配给Activity中的第一个EditText或可焦点控件。当然,InputMethod(通常是软键盘)将通过显示自身来响应焦点事件。当设置为stateAlwaysHidden时,AndroidManifest.xml中的windowSoftInputMode属性指示键盘忽略此自动分配的初始焦点。
Run Code Online (Sandbox Code Playgroud)<activity android:name=".MyActivity" android:windowSoftInputMode="stateAlwaysHidden"/>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/ll_root_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
LinearLayout llRootView = findViewBindId(R.id.ll_root_view);
llRootView.clearFocus();
Run Code Online (Sandbox Code Playgroud)
我已经完成更新配置文件信息时使用它,并从我的布局中删除EditText中的所有焦点
====>更新:在父布局内容中,我的EditText添加行:
android:focusableInTouchMode="true"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
113925 次 |
| 最近记录: |