我喜欢我的UI是直观的; 每个屏幕都应该自然而不引人注目地引导用户进入应用的下一步。 除此之外,我努力使事情变得混乱和混乱。
开玩笑 :-)
我有三个TableRows,每个包含一个只读和不可调焦的EditText控件,然后在其右侧有一个button。 每个button启动相同的活动,但具有不同的参数。 用户在那里做出select,子活动结束,用用户的select填充适当的EditText。
这是经典的级联价值机制; 每个select都会缩小下一个select的可用选项等。因此,我将禁用每个下一行的两个控件,直到当前行上的EditText包含一个值。
我需要按照以下顺序执行以下两项操作之一:
问题在子活动返回后出现; 被点击的button保持焦点。
回复:#1以上 – 似乎没有一个removeFocus()方法,或类似的东西
Re:上面的#2 – 我可以使用requestFocus()将焦点设置到下一行的button,并且在子活动返回之后工作,但由于某种原因,它在父活动的onCreate()中不起作用。
我需要在任何一个方向的UI一致性 – 在子活动完成后,或者每个button都获得焦点(取决于其在逻辑stream程中的位置,包括在任何select之前的第一个(且唯一的)活动button),则没有button具有焦点。
使用clearFocus()似乎没有为我工作,或者你发现(看到在另一个答案的意见),但最终对我的工作是增加:
<LinearLayout android:id="@+id/my_layout" android:focusable="true" android:focusableInTouchMode="true" ...>
到我的顶级布局视图(线性布局)。 要从所有button/ EditTexts等删除焦点,然后就可以了
LinearLayout myLayout = (LinearLayout) activity.findViewById(R.id.my_layout); myLayout.requestFocus();
除非我将观点设定为可调整的,否则请求焦点不会做任何事情。
老问题,但当我遇到类似的问题时,我碰到了它,并认为我会分享我最终做的事情。
获得重点的观点每次都不一样,所以我用了非常通用的观点:
View current = getCurrentFocus(); if (current != null) current.clearFocus();
那么只需在清单中的活动中添加android:windowSoftInputMode="stateHidden"
。
采取从一个聪明的人评论这个: https : //stackoverflow.com/a/2059394/956975
首先,它会100%的工作……..
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:app="https://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();
我已经完成更新configuration文件信息,并从我的布局中的EditText删除所有焦点时使用此
====>更新:在父级布局内容中,我的EditText添加行:
android:focusableInTouchMode="true"
您可以尝试closures主Activity的保存状态(从而使其忘记了文本以及焦点所在)。 你需要有一些其他方法来记住你的EditText有什么,并重新填充onResume()。 使用startActivityForResult()启动子活动,并在主Activity中创build一个onActivityResult()处理程序,以正确更新EditText。 这样,您可以在使用myButton.post(new Runnable(){run(){myButton.requestFocus();}})重新设置EditText的同时,设置合适的onResume()button。
View.post()方法最初设置焦点很有用,因为这个runnable会在窗口创build完成之后执行,让事情稳定下来,从而使焦点机制在那个时候正常工作。 尝试在onCreate / Start / Resume()期间设置焦点通常有问题,我发现。
请注意,这是伪代码,未经testing,但这是一个可能的尝试方向。
我试图禁用和启用可视性的焦点,它为我工作(焦点被重置):
focusedView.setFocusable(false); focusedView.setFocusableInTouchMode(false); focusedView.setFocusable(true); focusedView.setFocusableInTouchMode(true);
以上就是android开发分享如何消除焦点而不把焦点放在另一个控制上?相关内容,想了解更多android开发(异常处理)及android游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/addevelopment/515387.html