EditText设置监听软键盘删除键(或enter)

  • 一般使用方法
edittext.setOnKeyListener(new View.OnKeyListener(){@Overridepublic boolean onKey(View v, int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_DEL ){//处理操作}}
});
  • 问题:
    当点击软键盘的删除键时,处理操作会只执行两次或多次

  • 爬坑姿势:

edittext.setOnKeyListener(new View.OnKeyListener(){@Overridepublic boolean onKey(View v, int keyCode, KeyEvent event) {/*必须是这两个条件,否则会执行多次*/if (keyCode == KeyEvent.KEYCODE_DEL && event.getAction()==KeyEvent.ACTION_DOWN){//处理操作}}
});

刷新系统相册

当我们在系统的相册中增加或者删除图片,需要再次获取系统相册的所有图片时,需要通知系统刷新一下系统相册

/*通知系统刷新相册*/public static void noticeSystemRefreshAlbum(Context context,String path){Intent mediaScanIntent=new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);Uri uri=null;if (path!=null){uri= Uri.fromFile(new File(path));}mediaScanIntent.setData(uri);mediaScanIntent = PermissionUtil.getUriAuthority(mediaScanIntent);context.sendBroadcast(mediaScanIntent);}public static Intent getUriAuthority(Intent intent) {//对于android M及更高版本,intent需要提供URI相关权限以操作文件//文件uri需要通过FileProvider获取if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);}return intent;}

获取系统所有图片和按相册名分类

/*本地相片文件描述类*/
public class LocalPhotoBean implements Serializable{/** 系统数据库中的id */public long mediaId;/*文件名*/public String fileName;/*文件路径*/public String path;/*缩略图路径*/public String thumbNailPath;/*文件大小*/public long fileSize;/*所属文件夹名称*/public String albumName;/*文件夹识别id*/public String albumId;/*缓存用于显示的路径*/private String showPicPath;
}
/*相册文件夹描述类*/
public class PhotoAlbumBean  implements Serializable{/*文件夹识别Id*/public String albumId;/*文件夹名称*/public String albumName;/*文件夹封面路径*/public String albumCoverPath;/*文件夹封面缩略图路径*/public String albumCoverThumbNailPath;/*文件夹包含的图片*/public ArrayList<LocalPhotoBean> imageList;/*缓存的用于显示的路径*/private String showPicPath;}/*查询返回结果集*/public static class LocalPhotoDataList{//所有图片列表public ArrayList<LocalPhotoBean> photoList;//相册文件夹列表public ArrayList<PhotoAlbumBean> albumList;public LocalPhotoDataList(ArrayList<LocalPhotoBean> photoList, ArrayList<PhotoAlbumBean> albumList) {this.photoList = photoList;this.albumList = albumList;}}/***  通过ContentResolver ,查询本地图片信息* @param resolver* @return*/public static LocalPhotoDataList getLocalPhotos(ContentResolver resolver, int minImageSize){ArrayList<LocalPhotoBean> photoList=new ArrayList<>();HashMap<String ,PhotoAlbumBean> albumMap=new HashMap<>();ArrayList<PhotoAlbumBean> albumList=new ArrayList<>();Cursor cursor=null;try {//需要查询的数据'String[] queryColumns={MediaStore.Images.ImageColumns.DISPLAY_NAME,//图片名MediaStore.Images.ImageColumns.DATA,//图片路径MediaStore.Images.ImageColumns._ID,//图片数据库MediaStore.Images.ImageColumns.BUCKET_ID,//图片所在文件夹IdMediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME,//图片所在文件夹文件名MediaStore.Images.ImageColumns.SIZE,//图片大小MediaStore.Images.ImageColumns.MIME_TYPE,//图片格式MediaStore.Images.ImageColumns.MINI_THUMB_MAGIC,//缩略图IdMediaStore.Images.ImageColumns.DATE_MODIFIED//修改时间};//查询的条件String selection=MediaStore.Images.ImageColumns.SIZE +" >= ? AND "+MediaStore.Images.ImageColumns.MIME_TYPE + " != ? ";//排序规则 修改时间降序排列String orderBy=MediaStore.Images.ImageColumns.DATE_MODIFIED+" DESC";String[] args=new String[]{String.valueOf(minImageSize),"image/gif"};//查询资源数据cursor=resolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,queryColumns,selection,args,orderBy);if (cursor!=null&&cursor.moveToFirst()){int IndexName=cursor.getColumnIndex(MediaStore.Images.ImageColumns.DISPLAY_NAME);int IndexPath=cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);int IndexId=cursor.getColumnIndex(MediaStore.Images.ImageColumns._ID);int IndexBucket=cursor.getColumnIndex(MediaStore.Images.ImageColumns.BUCKET_ID);int IndexBucketName=cursor.getColumnIndex(MediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME);int IndexSize=cursor.getColumnIndex(MediaStore.Images.ImageColumns.SIZE);int IndexThumbId=cursor.getColumnIndex(MediaStore.Images.ImageColumns.MINI_THUMB_MAGIC);do{LocalPhotoBean photoItem=new LocalPhotoBean().setMediaId(cursor.getLong(IndexId)).setFileName(cursor.getString(IndexName)).setPath(cursor.getString(IndexPath)).setAlbumName(cursor.getString(IndexBucketName)).setAlbumId(cursor.getString(IndexBucket)).setFileSize(cursor.getLong(IndexSize))/*暂时缩略图*/;photoList.add(photoItem);//刷新文件夹集合数据PhotoAlbumBean photoAlbum=albumMap.get(photoItem.albumId);if (photoAlbum==null){photoAlbum=PhotoAlbumBean.getInstance(photoItem.albumName,photoItem.albumId);albumMap.put(photoItem.albumId,photoAlbum);}photoAlbum.addItem(photoItem);}while (cursor.moveToNext());}/*相册文件夹列表*/albumList.addAll(albumMap.values());/*排序*/Collections.sort(albumList);return new LocalPhotoDataList(photoList, albumList);}catch (SecurityException se) {} catch (Exception e) {e.printStackTrace();LogUtils.d(ApiConstants.MEDIA_LOG_TAG, "Error getLocalPhotos");} finally {if (cursor != null) {cursor.close();}}return null;}

Android踩坑日记:监听软键盘多次调用和刷新系统相册和获取所有相片相关推荐

  1. 【Android应用】【监听软键盘弹起与关闭】

    [背景] 在很多App开发过程中需要在Activity中监听Android设备的软键盘弹起与关闭,但是Android似乎没有提供相关的的监听API给我们来调用,本文提供了一个可行的办法来监听软键盘的弹 ...

  2. Android开发之EditText监听软键盘清除(输入是否清除)

    当我们监听数据变化后再相应的位置新增符号,发现无法删除,所以有了下面的方法 我下面是监听400||800电话,每三位添加"-":例如400-855-8574 但是当我发现删除的时候 ...

  3. Android App监听软键盘按键的三种方式(转)

    最近有类似需求,在csdn上刚好发现,粘贴过来,以防止忘记喽 前言: 我们在android手机上面有时候会遇到监听手机软键盘按键的时候,例如:我们在浏览器输入url完毕后可以点击软键盘右下角的&quo ...

  4. Android App监听软键盘按键的三种方式

    前言: 我们在android手机上面有时候会遇到监听手机软键盘按键的时候,例如:我们在浏览器输入url完毕后可以点击软键盘右下角的"GO"按键加载url页面:在点击搜索框的时候,点 ...

  5. android 代码设置 键盘适应_Android自适应软键盘的Dialog以及监听软键盘弹起

    最近项目中遇到一个需求:新手引导.跟一般的新手引导没有什么太大区别,思路都是搞一个带阴影的遮罩层,然后在上边儿给一些提示性的文字,由于需求中有些特殊的地方,所以我用了一个全屏的dialog(而且,di ...

  6. android 键盘隐藏监听,安卓监听软键盘弹出与隐藏的两种方法

    需求: 现在有一个需求是点击一行文本框,弹出一个之前隐藏的输入框,输入完成后按返回键或者其他的东西隐藏键盘和输入框,将输入框的内容填充到文本框中. 实现: 拿到这个需求的第一反应就是写一个监听来监听键 ...

  7. Android 监听软键盘的高度并解决其覆盖输入框的问题

    1.前言 在某些项目中,我们常常需要自定义一个输入框,软键盘弹出时就把输入框顶上去,关闭时输入框再回到原位(比如下方的效果图,实际上各种 App 中的聊天界面和发布评论的界面大体都是这样).在这个过程 ...

  8. Android App监听软键盘按键的三种方式与改变软键盘右下角确定键样式

    Android App监听软键盘按键的三种方式与改变软键盘右下角确定键样式 actionNone : 回车键,按下后光标到下一行 actionGo : Go, actionSearch : 放大镜 a ...

  9. Android 类似淘宝 电商 搜索功能,监听软键盘搜索事件,延迟自动搜索,以及时间排序的搜索历史记录的实现

    最近跳槽去新公司,接受的第一个任务是在 一个电商模块的搜索功能以及搜索历史记录的实现. 需求和淘宝等电商的功能大体差不多,最上面一个搜索框,下面显示搜索历史记录.在EditText里输入要搜索的关键字 ...

最新文章

  1. pandas使用applymap函数替换dataframe的内容或者数值:applymap函数使用字典替换多个列的内容(数值)
  2. 聊聊flink的TimeCharacteristic
  3. 创业路上的这点事之 从无到有,从有到......
  4. 51单片机的中断系统
  5. 锁优化:逃逸分析、自旋锁、锁消除、锁粗化、轻量级锁和偏向锁
  6. linux下安装nvm进行node的版本的快速切换
  7. post获取重定向的链接 python_欧美音乐网站Python爬虫项目实战
  8. wxml 判断 小程序_如何判断小程序外包公司是否靠谱
  9. 12022.ADS7138采集芯片
  10. nginx .conf
  11. Linux基础——搭建自己的云计算, 多电脑共享你云端文件
  12. TensorFlow精进之路(十五):深度神经网络简介
  13. 信息反馈-邮件(数据库是XML) (收集)
  14. WPF高性能绘图之DrawingCanvas、DrawingVisual、Button的同时使用
  15. 嵌入式培训课程哪里好?嵌入式开发学习路线
  16. 七牛云 转码_七牛云视频在线转码 - 持久化处理
  17. Carson带你学数据结构:手把手带你了解 ”图“ 所有知识!(含DFS、BFS)
  18. sql中替换字段的部分字符
  19. Latex导入pgf图片
  20. python剪刀石头布游戏

热门文章

  1. python 语言教程(3)变量之字典
  2. Html 教程 (1)简介
  3. (chap2 TCP/IP基础知识) TCP/IP协议分层模型-应用层
  4. ❗HTML引入CSS的三种常用方式汇总❗
  5. JavaScript之自定义对象
  6. [watevrCTF 2019]Baby RLWE
  7. Windows保护模式学习笔记(十)—— TLB
  8. hook虚表监控虚表
  9. JAVA md5加密的工具类
  10. mysql 1045 登录失败