如何从单个editText删除焦点

可能重复:
停止EditText获得焦点在活动启动?

在我的应用程序中,我有一个单独的EditText和一些TextViews,button和一个微调框。 我相信,我的EditText接受了焦点,因为它是这个活动中唯一的焦点视图。 我的EditText显示在该字段上的橙色边框和光标。
现在我想从这个字段中删除焦点(我不希望光标和边框显示)。 有没有办法做到这一点?
我已经能够通过做button.seFocusableInTouchMode()和button.requestFocus()来关注button。 但是这突出了button,显然不是我想要的。

检查这个问题和选定的答案: 停止EditText获得焦点在活动启动这是丑陋的,但它的作品,据我所知没有更好的解决scheme。

你有没有尝试使用旧的View.clearFocus()

新的Android ..试过

 getWindow().getDecorView().clearFocus(); 

它适用于我..如果有什么问题请亲切的纠正我:)

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

  android:focusable="true" android:focusableInTouchMode="true" 

使用附加的代码将重点放在“其他人”上,如果你有一个观点,你只是想closures键盘并释放焦点,那么你就没有问题,你并不关心谁能得到它。

像这样使用:FocusHelper.releaseFocus(viewToReleaseFocusFrom)

 public class FocusHelper { public static void releaseFocus(View view) { ViewParent parent = view.getParent(); ViewGroup group = null; View child = null; while (parent != null) { if (parent instanceof ViewGroup) { group = (ViewGroup) parent; for (int i = 0; i < group.getChildCount(); i++) { child = group.getChildAt(i); if(child != view && child.isFocusable()) child.requestFocus(); } } parent = parent.getParent(); } } } 

Doc:该方法从子视图向上遍历视图树,并查找要注意的第一个子项。

编辑:你也可以使用这个API:

 View focusableView = v.focusSearch(View.FOCUS_DOWN); if(focusableView != null) focusableView.requestFocus(); 

我知道为时已晚,但对于某些需要同样需求的人来说,editText.setFocusable(false)si就是你要找的东西。

我有一个类似的问题与editText,这是活动开始以来得到了重点。 这个问题,我很容易解决这个问题:

你将这段代码添加到包含XML中的editText的布局中:

  android:id="@+id/linearlayout" android:focusableInTouchMode="true" 

不要忘了android:id ,没有它我有一个错误。

editText的另一个问题是,一旦获得第一个焦点,焦点就不会消失。 这是我在java中的一段代码,它有一个editText和一个捕获editText中的文本的button:

  editText=(EditText) findViewById(R.id.et1); tvhome= (TextView)findViewById(R.id.tv_home); etBtn= (Button) findViewById(R.id.btn_homeadd); etBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { tvhome.setText( editText.getText().toString() ); //** this code is for hiding the keyboard after pressing the button View view = Settings.this.getCurrentFocus(); if (view != null) { InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } //** editText.getText().clear();//clears the text editText.setFocusable(false);//disables the focus of the editText Log.i("onCreate().Button.onClickListener()", "et.isfocused= "+editText.isFocused()); } }); editText.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(v.getId() == R.id.et1) { v.setFocusableInTouchMode(true);// when the editText is clicked it will gain focus again //** this code is for enabling the keyboard at the first click on the editText if(v.isFocused())//the code is optional, because at the second click the keyboard shows by itself { InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(v, InputMethodManager.SHOW_IMPLICIT); } //** Log.i("onCreate().EditText.onClickListener()", "et.isfocused= "+v.isFocused()); } else Log.i("onCreate().EditText.onClickListener()", "the listener did'nt consume the event"); } }); 

希望这会对你们中的一些人有所帮助!

只要find另一个视图,并把它给重点。

 var refresher = FindViewById<MvxSwipeRefreshLayout>(Resource.Id.refresher); refresher.RequestFocus(); 

我将尝试解释如何从EditText视图中删除焦点(闪烁的光标)与一些更多的细节和理解。 通常这行代码应该工作

 editText.clearFocus() 

但是在editText仍然有焦点的情况下可能会出现这种情况,这是因为clearFocus()方法试图将焦点设置回活动/片段布局中的第一个可聚焦视图。

因此,如果在可聚焦的活动中只有一个视图,并且这通常是您的EditText视图,则clearFocus()将再次将焦点设置为该视图,并且对于您来说,它将看起来clearFocus()不起作用。 请记住,默认情况下,EditText视图是可以聚焦的(true),所以如果您的布局中只有一个EditText视图,它将始终将焦点放在屏幕上。 在这种情况下,你的解决scheme将是find布局文件中的父视图(一些布局,例如LinearLayout,Framelayout),并将其设置为这个xml代码

 android:focusable="true" android:focusableInTouchMode="true" 

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

我希望这将有助于人们了解clearFocus()如何工作。

我已经尝试了很多清除编辑文本的焦点。 clearfocus()和可聚焦的和其他的东西从来没有为我工作。 所以我想出了让一个假的编辑文本获得焦点的想法:

 <LinearLayout ... android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout ... android:layout_width="match_parent" android:layout_height="match_parent"> <!--here comes your stuff--> </LinearLayout> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/fake" android:textSize="1sp"/> </LinearLayout> 

那么在你的java代码中:

 View view = Activity.this.getCurrentFocus(); if (view != null) { InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), 0); fake.requestFocus(); } 

它会隐藏键盘,并删除任何具有它的编辑文本的焦点。 也就像你看到的假的编辑文字不在屏幕上,不能被看到

只要包括这一行

 android:selectAllOnFocus="false" 

在对应于EditText布局的XML段中。

你只需要从视图中清除焦点

 EditText.clearFocus() 

如果我正确理解你的问题,这应该可以帮助你:

 TextView tv1 = (TextView) findViewById(R.id.tv1); tv1 .setFocusable(false); 

由于我在一个小部件,而不是在一个活动,我做了:

`getRootView()clearFocus();