我的布局包含ListView,SurfaceView和EditText.当我点击EditText它时,它会获得焦点并弹出屏幕键盘.当我点击EditText它之外的某个地方时,它仍然有焦点(它不应该).我想我可以OnTouchListener在布局中设置其他视图并手动清除EditText焦点.但似乎过于hackish ......
我在其他布局中也有相同的情况 - 列表视图中包含不同类型的项目,其中一些项目EditText位于内部.他们的行为就像我上面写的那样.
EditText当用户触摸外面的东西时,任务就是失去焦点.
我在这里看到过类似的问题,但没有找到任何解决方案......
在视图上,我有一个 LinearLayout,当我单击下面的 EditText 时,我想折叠它,然后在我们取消焦点时展开它。
<EditText
android:layout_width="1000dp"
android:layout_height="43dp"
android:layout_centerVertical="true"
android:textSize="14.4sp"
android:gravity="center_vertical"
android:hint="@string/hint_query"
android:layout_toEndOf="@+id/searchImage"
android:id="@+id/searchBoxText"
android:background="@null"
android:layout_marginStart="16dp"
android:inputType="text"
tools:ignore="Autofill" />
Run Code Online (Sandbox Code Playgroud)
感谢 Android-Annotations,我实现了一个 onFocusChangeListener。
@FocusChange
void searchBoxText(EditText searchBoxText) {
Log.d("change focus", "focus has changed with " + searchBoxText.hasFocus());
if (!searchBoxText.hasFocus()) {
if(upperView != null)
upperView.setVisibility(View.VISIBLE);
} else {
if(upperView != null)
upperView.setVisibility(View.GONE);
}
}
Run Code Online (Sandbox Code Playgroud)
我在父级上有一个 touchListener ,它抛出:
searchBoxText.clearFocus();
Run Code Online (Sandbox Code Playgroud)
当我们点击 EditText 之外的时候。
平板电脑我的目标是将此代码支持为最大 API 24。我的问题是此代码在 API 28 中完美运行,但在 API 24 上运行不佳,它会抛出 onFocusChange 两次,而且我没有找到任何原因来说明为什么这样做或任何让它发挥作用的方法。