我的布局包括ListViewSurfaceViewEditText.当我点击EditText时,它会收到焦点,屏幕上的键盘会弹出.当我单击EditText之外的某个位置时,它仍然具有焦点(应该不会). 我想我可以在布局中的其他视图上设置OnTouchListener,并手动清除EditText的焦点.但看起来太老土了...

在另一个布局列表视图中,我也有同样的情况,其中有不同类型的项,其中一些内有EditText个.他们的行为就像我在上面写的那样.

这项任务是当用户touch 到EditText以外的物体时,使其失go 焦点.

我在这里看到过类似的问题,但没有找到任何解决方案...

推荐答案

我try 了所有这些解决方案.edc598是最接近工作的,但在布局中包含的其他View个上没有触发touch 事件.如果有人需要这种行为,我最后就是这么做的:

我创建了一个名为touchInterceptor的(不可见)FrameLayout作为布局中的最后一个View,因此它覆盖了所有内容(edit:您还必须使用RelativeLayout作为父布局,并赋予touchInterceptor fill_parent属性).然后我用它来拦截触碰,并确定触碰是否在EditText之上:

FrameLayout touchInterceptor = (FrameLayout)findViewById(R.id.touchInterceptor);
touchInterceptor.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            if (mEditText.isFocused()) {
                Rect outRect = new Rect();
                mEditText.getGlobalVisibleRect(outRect);
                if (!outRect.contains((int)event.getRawX(), (int)event.getRawY())) {
                    mEditText.clearFocus();
                    InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
                }
            }
        }
        return false;
    }
});

返回false以使touch 处理失败.

这很有意思,但这是唯一对我有用的东西.

Android相关问答推荐

理解修饰符<;方法>;与修饰符<;方法>;:效果和行为解释(Android开发者Jetpack Compose)

推断的类型是片段,但应为上下文

如何制作安卓';s FileProvider在Android 11上使用外部存储+

Android Kotlin - 计费 - 从应用内购买获取productId

为什么我在 android 中使用 TabLayout 时无法启动我的 Activity?

在java android studio项目上安装mapbox

使用 Gadle kotlin 为多模块 Android 代码库设置 jacoco

Andorid Studio编译器如何自动为变量editText生成mutableStateOf("")的方法名?

如何在Android Studio中删除项目

如何在 Jetpack Compose 中对数据类进行 Parcelize

任务 ':app:kaptGenerateStubsDebugKotlin' 执行失败

Jetpack Compose 部分或开放侧边框

如何在 Compose 中使用合并的单元格创建网格视图?

在 android list 中添加 IsMonitoringTool 元数据标志的位置

Kotlin Compose 全局页脚视图

可扩展性 Qt 5.15 Android

自定义布局忽略可组合的大小

(Android) 如何在一对多关系中将子 ID 与父级匹配

在delphi中将Jnet_uri转换为Tbitmap

lambda 函数中的类型不匹配 - Kotlin