如何从单个editText中删除焦点

tob*_*nb3 54 android

在我的应用程序中,我有一个单独的EditText,一些TextViews按钮和一个微调器.我相信,我的EditText会获得焦点,因为它是此活动中唯一可聚焦的视图.我的EditText节目带有橙色边框和光标在场上.

现在我想从这个字段中删除焦点(我不希望光标和边框显示).有没有办法做到这一点?

通过做button.seFocusableInTouchMode()和我能够专注于按钮button.requestFocus().但这突出了按钮,显然不是我想要的.

小智 44

你有没有尝试过旧的好事 View.clearFocus()

  • 如果有多个可聚焦视图,它可以工作 (4认同)
  • 对我不起作用.在onCreate中调用它,但EditText保持边框和闪烁光标. (3认同)

Zar*_*aki 41

新的Android ..尝试过

getWindow().getDecorView().clearFocus();
Run Code Online (Sandbox Code Playgroud)

它对我有用..如果有什么不对,请帮我纠正:)

只是添加..你的布局应该有:

 android:focusable="true"
 android:focusableInTouchMode="true"
Run Code Online (Sandbox Code Playgroud)

  • 添加其他两行后,editText.clearFocus() 就足够了 (2认同)

Mar*_*ues 23

检查这个问题和选择的答案:停止EditText在活动启动时获得关注它很难看但它有效,据我所知,没有更好的解决方案.

  • 谢谢,我没见过那个.我的EditText被包装在一个TableLayout中,所以这样做:<TableRow android:focusable ="true"android:focusableInTouchMode ="true"> <TextView android:id ="@ + id/phone_label"android:text ="Telefon:" android:layout_height ="wrap_content"/> <EditText android:id ="@ + id/phone"android:layout_height ="wrap_content"/> </ TableRow>为我解决了这个问题. (4认同)

Sto*_*eev 17

我将尝试解释如何从EditText视图中删除焦点(闪烁光标)以及更多细节和理解.通常这行代码应该有效

editText.clearFocus()
Run Code Online (Sandbox Code Playgroud)

但是当editText仍然具有焦点时可能会发生这种情况,并且这种情况正在发生,因为clearFocus()方法正在尝试将焦点设置回活动/片段布局中的第一个可聚焦视图.

因此,如果活动中只有一个可聚焦的视图,这通常是您的EditText视图,那么clearFocus()将再次将焦点设置为该视图,并且对于您来说,它将看起来clearFocus()不起作用.请记住,默认情况下EditText视图是可聚焦的(true),因此如果您的布局中只有一个EditText视图,它将远离焦点在屏幕上.在这种情况下,您的解决方案是在布局文件中找到父视图(某些布局,ex LinearLayout,Framelayout)并将其设置为此xml代码

android:focusable="true"
android:focusableInTouchMode="true"
Run Code Online (Sandbox Code Playgroud)

之后,当您执行editText.clearFocus()时,布局中的父视图将接受焦点,您的editText将清除焦点.

我希望这能帮助有人理解clearFocus()是如何工作的.

  • 对我来说,这个API设计是Android上的一个错误.我想清除焦点,而不是把它给别的东西.API在实践中是非确定性的(即使它听起来是理论上的),这太可怕了.为什么你希望你的DEFAULT行为做一些不明确的事情,比如"让我找到你的层次结构中的第一个视图是谁支持焦点并将其提供给那个视图......而不仅仅是......你知道,从焦点中删除焦点查看,这就是你要我做的事情." 键盘处理/专注于Android是令人遗憾的. (2认同)

Omi*_*miK 5

如果Edittext父布局Linear然后添加

 android:focusable="true" 
 android:focusableInTouchMode="true"
Run Code Online (Sandbox Code Playgroud)

像下面

    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:focusable="true"
            android:focusableInTouchMode="true">

           <EditText/>
          ............
Run Code Online (Sandbox Code Playgroud)

当 Edittext 父布局是相对的然后

  android:descendantFocusability="beforeDescendants"
  android:focusableInTouchMode="true"
Run Code Online (Sandbox Code Playgroud)

喜欢

  <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:descendantFocusability="beforeDescendants"
            android:focusableInTouchMode="true">

           <EditText/>
          ............
Run Code Online (Sandbox Code Playgroud)