AndroidStudio 编辑面板中的各种文件快速在Project视图中选中(图片资源,java类,xml等)

为解决在Android Studio中快速定位与选中资源文件的需求,博主开发了一款名为FindInProjectView的插件,仅用5行代码实现了从当前选中的资源文件名到在Project视图中找到并选中该文件的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

新来一个项目,发现有不少界面,代码可以直接从旧的项目copy。在copy图片资源的时候,很蛋疼,打开xml布局,找到图片,点击打开,copy… paste… ??? 竟然无法粘贴到桌面! . 只能粘贴到可以编辑的word 文档,qq编辑框之类的地方。
这里写图片描述
这就坑爹了。 只好到Project视图中 浩如烟海的资源drawable目录中去找我那一个小小的.png。
虽然可以搜索,但是仍然很慢啊!
copy paste打法效率大打折扣。

当时项目beta版本工期紧,在AndroidStudio的Plugin 仓库中各种关键词搜索 Go To Project View ,Navigator to .., find in …啊等等,没找到想要的插件,只好作罢。

最近比较闲,打算自己动手丰衣足食。 花了3天off hours。搞定。。 最终只用了5行代码。

不过过程还是比较坎坷:

1.先百度,看了几个教程。发现基本都是新建一个action从 public void actionPerformed1(AnActionEvent e)这个方法入手。

新建action的时候会有groups选择。查阅文档了解到jetbrains 将 其Ide的各类菜单分类各种groups,旁边的actions是这一个groups中的一个选项。。 选择了哪个groups,通过anchor 指定位置,就会把你设置的按钮放置到哪。
这里写图片描述
比如我指定Navigator ,Anchor first,插件安装后就出现在了这里
这里写图片描述

AnActionEvent e 。类似于MotionEvent e。actionPerformed方法中获取事件e进行处理。
尝试在该方法中再次调用actionPerformed,运行插件,点击我设置的按钮FindInProjectView,果然出现了Stackoverflow。。无限递归。

鸿杨的开发Plugin教程中使用e.getData(PlatformDataKeys.EDITOR) ,通过PlatformDataKeys.EDITOR 这个 key值可以获得当前我选中的文本。

2 ok,开始尝试各种key能获取到的信息。各种debug,evaluate.evaluate是个好东西,可以尝试各种表达式的值。

仔细想想我的需求:
1首先必然要找到我选中的文件名
2.搜索到该文件
3.在project view中找到该文件并选中它。
是的,PlatformDataKeys.EDITOR 可以拿到选中的文本,那我就最简单的这一步开始,选中我要找的资源文件名,搜索。
这里写图片描述
翻jetbrains 的文档,发现他的文件组织形式有2种。

It supports two main types of indexes:

File-based indexes
Stub indexes

使用第一种。FilenameIndex.getFilesByName.. 查找bottom,竟然返回空。
果断evaluate 看一下FilenameIndex.getAllFilenames 返回结果。果然返回了一个巨大无比的数组,可是查找bottom 为何是空?
尝试 自己加了一个后缀 .png查找,果断找到了他。

剩下的就是跳转的问题了。猜到 ProjectView 应该是属于另外一个组件,使用PlatformDataKeys.CONTEXT_COMPONENT 这个key搜索一下,
Component component = e.getData(PlatformDataKeys.CONTEXT_COMPONENT);

String name = component.getName();
确实选中projectview时,可以拿到这个component的名字,选中其他组件时,显示的是其他组件的名字。然而怎么跳转?

PsiFile 各种尝试,发现有一个navigate(boolean var1)方法,咦~~ 这不就是navigate到这个文件的意思么 果断navigate( true)一个。发现确实是跳转了,但是是跳转到navigator bar 了。
线索中断…

第二天,忙完了又试了试,无意间发现每一个component都可以getInstance。果断尝试
ProjectView.getInstance(e.getProject()),发现有一个selectPsiElement方法
尝试之..ProjectView.getInstance(e.getProject()).selectPsiElement(filesByName[0], true);
完美。跳转了。

3.插件写完发布了,才发现.. tmd 原来跳转到navigator bar 再右键复制 就可以直接粘贴到桌面了。TMD 这真是一个悲伤的故事。

 but,也许快速跳转到project view 除了复制之外 还有别的用处呢。总之,下次还有需求起码可以快速开撸了~~

想想还是很开心呢~

项目Github 地址https://github.com/tmac1999/FindInProjectView 可以在这个地址下载jar包使用,也可以在android studio的Plugin 仓库里搜索FindInProjectView 安装。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值