对于android焦点出现的问题做个总结:

设置控件可以获得焦点

  1. 首先,给控件添加 android:focusableInTouchMode=“true” 属性:
  1. 紧接着可以给该控件添加焦点监听事件:
    添加如下监听方法之后,每当这个view获取和取消都会回调监听方法。
//获取焦点tvText.requestFocus();//添加监听tvText.setOnFocusChangeListener((v, hasFocus) -> Log.e(TAG, "onFocusChange: " + hasFocus ));

出现问题

理论上经过上面两步骤,之后应该执行onFocusChange方法,但是经过测试并没有回调,why?没有生效?
解决方式:延迟调用获取焦点方法,参考如下:延迟一会儿你会发现onFocusChange会被立即调用

new Handler().postDelayed(() -> {        tvText.requestFocus();    },300);

如果该控件有点击的事件操作,在添加android:focusableInTouchMode="true"之后,暂未取得焦点的时候,该view的第一个点击事件必须点两次view才会生效,因为第一次是取得焦点,第二次才会执行onClick,点击两次显然不太好,那么如何让在第一次点击的时候就执行onClick而不是获取焦点呢,参考如下:

tvText.setOnTouchListener((v, event) -> {    if (event.getAction() == MotionEvent.ACTION_UP) {        v.performClick();    }    return false;});        

即可实现需求效果,解决android:focusableInTouchMode=“true” 和 onClick同时存在的问题。

更多相关文章

  1. Android(安卓)Launcher 分析
  2. Android(安卓)TextView文字横向自动滚动(跑马灯)
  3. 在控件的任意位置显示图片
  4. Android(安卓)Material Design 之CardView 属性解析及使用
  5. Android中EditText输入框焦点从文字前面变成文字后面
  6. Android(安卓)Support Library
  7. 自定义SeekBarPreference控件(老外出品,直接在preferences文件中
  8. Android中UI设计的一些技巧!!!
  9. 【Android】TextView动态设置Drawable资源

随机推荐

  1. android 5.0 安装APP 出现 Failure [INST
  2. Android/JAVA 针对时间戳转今天昨天前天,
  3. Android中TextSwitcher的功能与用法
  4. Android(安卓)OpenGL ES正方体纹理贴图(
  5. DroidPlugin插件框架 - 《Android必备技
  6. Android(安卓)Studio 添加jar或aar依赖的
  7. Android的View的VISIBLE,INVISIBLE,GONE
  8. Android(安卓)可拖拽悬浮按钮
  9. 使用showmap分析android进程内存占用情况
  10. 详解Android中的屏幕方向类型