禁用编辑文本的自动焦点

我有一个编辑文本:

   <LinearLayout android:id="@+id/linearLayout7" android:layout_width="match_parent" android:layout_height="wrap_content">
<EditText android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_weight="1" android:id="@+id/editText1" android:text="3">
<requestFocus></requestFocus>
</EditText>
<Button android:text="Button" android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/button2"></Button>
</LinearLayout>

下面还有其他东西

我遇到的问题是,当应用程序启动时,焦点是在输入上,我不希望应用程序启动时,焦点是在输入上。

我试过移除

<requestFocus></requestFocus>

什么都没做。

109937 次浏览

编辑文本的父布局中添加 android:focusable="true"android:focusableInTouchMode="true"元素,如下所示;

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout7" android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:focusable="true" android:focusableInTouchMode="true">

我觉得这对你有帮助。

参见
Android 开发者处理触摸和输入的官方指南

没有更多的工作... 只需添加 android: windowSoftInputMode = “ stateAlwaysHidden” 到 Manifest.xml 文件的活动标记。

<EditText
android:id="@+id/input"
android:layout_width="0dp"
android:layout_height="48dp"
android:focusable="false"
android:focusableInTouchMode="false" />


detailInputView = (EditText) debugToolsView.findViewById(R.id.input);
detailInputView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
detailInputView.setFocusable(true);
detailInputView.setFocusableInTouchMode(true);
return false;
}
});

只需将以下内容添加到您的主布局视图 xml 标记中:

 android:focusableInTouchMode="true"

,

有几种方法可以做到这一点,穆达西已经给了你一个方法来做到这一点。

如果这个想法不起作用,那么就做一些简单的事情-

AndroidManifest>Activity中添加以下简单代码:

android:windowSoftInputMode="stateHidden"

在 XML 的 EditText 中不需要做任何事情,所有工作都将是工作,并且不会出现焦点。

看看现实生活中的示例代码:

<activity
android:name=".MainActivity"
android:windowSoftInputMode="stateHidden"
android:label="@string/app_name"
>


<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<LinearLayout
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_width="0px"
android:layout_height="0px" />


<EditText android:text=""
android:id="@+id/EditText01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="@string/hint">
</EditText>

不需要其他代码,这是一个简单明了的解决方案。

如果希望清除编辑文本上的默认焦点,请使用以下2个属性

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

线性布局。

例如:

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




<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="email id"
android:inputType="textEmailAddress"
android:maxLines="1"
/>


</LinearLayout>

如果要在创建活动时隐藏键盘,请在清单文件活动标记中使用这些属性 例如:

 <activity
android:configChanges="screenSize|orientation|keyboardHidden"
android:screenOrientation="portrait"
android:name=".activities.LoginActivity"
android:windowSoftInputMode="stateHidden|adjustResize"/>

如果您想隐藏键盘上的按钮单击或一些事件发生使用以下代码

 public void onClick(View v) {
try {
//InputMethodManager is used to hide the virtual keyboard from the user after finishing the user input
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm.isAcceptingText()) {
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
} catch (NullPointerException e) {
Log.e("Exception", e.getMessage() + ">>");
}
}
} catch (NullPointerException e) {
Log.e("Exception", e.getMessage() + ">>");
}

如果您想在离开活动后将焦点从编辑文本字段中移除

@Override
protected void onResume() {
super.onResume();
mEmail.clearFocus();
mPassword.clearFocus();
}

最后,如果要在提交表单时清除编辑文本字段中的数据,请使用

 @Override
protected void onResume() {
super.onResume();
mEmail.getText().clear();
mPassword.getText().clear();
}

您可以使用隐藏的窗口软输入模式隐藏键盘和 android:focusable="false"android:focusableInTouchMode="true"

<activity
android:name=".MainActivity"
android:windowSoftInputMode="stateHidden"
android:label="@string/app_name"
>


<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

尝试在 LinearLayout 中使用此代码

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


<EditText


android:hint="Search..."
android:drawableRight="@drawable/ic_search"
android:id="@+id/search_tab_hotbird_F"
android:layout_width="match_parent"
android:layout_height="wrap_content" />


<android.support.v7.widget.RecyclerView
android:id="@+id/recyHotbird_F"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="4dp">


</android.support.v7.widget.RecyclerView>


</LinearLayout>

它为我工作,希望也会帮助你。

或者:

android:windowSoftInputMode="stateAlwaysHidden"

将此属性添加到特定活动下的 Manifest.xml 文件中,您希望在该文件中禁用自动焦点。 缺点: 它只会隐藏你的软键盘,光标仍然会在那里。

其他:

 android:focusableInTouchMode="true"

将此属性添加到 UI xml 文件中(在父布局下) ,以便将焦点同时隐藏在键盘上。

对于明确的默认请求 Focus,您应该像下面这样设置您的视图的父焦点 = “ true”

<android.support.constraint.ConstraintLayout
android:id="@+id/coordinatorChild"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode="true">

在显示父视图之前,我这样做了(它工作得很好) ,只要我触摸它,编辑文本就不会自动聚焦。(ParentView 包含编辑文本)

...
parentView.setFocusable(true);
parentView.setFocusableInTouchMode(true);
objProperties.setVisibility(VISIBLE);
...