在我的应用程序中,我有一个EditText
和一些TextViews
,按钮和一个微调器。我相信,我的EditText会获得焦点,因为它是此活动中唯一可聚焦的视图。我的EditText
显示橙色边框和光标在该字段上。
现在我想从这个字段中删除焦点(我不希望光标和边框显示)。有没有办法做到这一点?
我可以通过button.seFocusableInTouchMode()
和button.requestFocus()
关注按钮。但这突出了按钮,显然不是我想要的。
答案 0 :(得分:42)
您是否尝试使用旧版View.clearFocus()
答案 1 :(得分:35)
新到android ..试过
getWindow().getDecorView().clearFocus();
它对我有用..如果出现问题,请向我纠正:)
只是添加..你的布局应该有:
android:focusable="true"
android:focusableInTouchMode="true"
答案 2 :(得分:22)
检查这个问题和选定的答案:Stop EditText from gaining focus at Activity startup这很难看,但它有效,据我所知,没有更好的解决方案。
答案 3 :(得分:13)
我将尝试解释如何从EditText视图中删除焦点(闪烁光标)以及更多细节和理解。通常这行代码应该可以工作
editText.clearFocus()
但是当editText仍然具有焦点时可能会发生这种情况,因为clearFocus()方法正试图将焦点设置回活动/片段布局中的第一个可聚焦视图。
因此,如果活动中只有一个可聚焦的视图,这通常是您的EditText视图,那么clearFocus()会将焦点再次设置为该视图,对于您来说,看起来clearFocus()是不工作 请记住,默认情况下EditText视图是可聚焦的(true),因此如果您的布局中只有一个EditText视图,它将远离焦点在屏幕上。在这种情况下,您的解决方案是在布局文件中找到父视图(某些布局,ex LinearLayout,Framelayout)并将其设置为此xml代码
android:focusable="true"
android:focusableInTouchMode="true"
之后执行editText.clearFocus()时,布局中的父视图将接受焦点,并且您的editText将清除焦点。
我希望这有助于某人了解clearFocus()的运作方式。
答案 4 :(得分:3)
我知道为时已晚,但对于有相同需求的人来说,editText.setFocusable(false)就是你要找的。 p>
答案 5 :(得分:2)
使用附加的代码将焦点放在“其他人”上,如果你有一个只想放弃键盘并释放焦点的视图就可以了,你真的不关心谁得到它。 / p>
像这样使用: 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();
}
}
}
文档: 该方法从子视图遍历视图树并查找要关注的第一个子视图。
编辑: 您也可以使用API:
View focusableView = v.focusSearch(View.FOCUS_DOWN);
if(focusableView != null) focusableView.requestFocus();
答案 6 :(得分:2)
我在editText中遇到了类似的问题,该问题在活动开始后获得了关注。这个问题我很容易解决这个问题:
将这段代码添加到包含xml中的editText的布局中:
android:id="@+id/linearlayout"
android:focusableInTouchMode="true"
不要忘记android:id
,没有它我就有错误。
我对editText的另一个问题是,一旦获得第一个焦点,焦点就永远不会消失。这是我在java中的一段代码,它有一个editText和一个捕获editText中文本的按钮:
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");
}
});
希望对你们中的一些人有所帮助!
答案 7 :(得分:2)
如果Edittext
的父级布局是Linear
,则添加
android:focusable="true"
android:focusableInTouchMode="true"
如下所示
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:focusable="true"
android:focusableInTouchMode="true">
<EditText/>
............
当Edittext父级布局相对时,则
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"
喜欢
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true">
<EditText/>
............
答案 8 :(得分:2)
我试图清除编辑文本的焦点。 clearfocus()和焦点和其他东西从来没有为我工作。 所以我想出了让虚假的edittext获得焦点的想法:
<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();
}
它会隐藏键盘并删除任何包含它的edittext的焦点。而且当你看到假的edittext不在屏幕上而且看不到时
答案 9 :(得分:2)
找到另一个视图并改为关注它。
var refresher = FindViewById<MvxSwipeRefreshLayout>(Resource.Id.refresher);
refresher.RequestFocus();
答案 10 :(得分:1)
这对我来说很有效
将这些属性添加到您的EditText
android:focusable="true"
android:focusableInTouchMode="true"
之后,您只需编写代码即可
editText.clearFocus()
答案 11 :(得分:0)
因为我在一个小部件而不是我做过的活动中:
`getRootView()clearFocus();
答案 12 :(得分:0)
您只需要从视图中清除焦点
EditText.clearFocus()
答案 13 :(得分:0)
(pipeline
| ...
| "print" >> beam.Map(print)
)
result = pipeline.run()
result.wait_until_finish()
答案 14 :(得分:0)
如果我理解你的问题,这可以帮到你:
TextView tv1 = (TextView) findViewById(R.id.tv1);
tv1 .setFocusable(false);
答案 15 :(得分:0)
您只需要使用以下属性设置ViewGroup:
android:focusableInTouchMode="true"
ViewGroup是包含每个子视图的布局。
答案 16 :(得分:0)
只需包含此行
android:selectAllOnFocus="false"
在与EditText布局对应的XML段中。