Android项目:获取src/main/logo文件夹基础路径失败,代码调用无效求助
解决Android自定义logo文件夹图片读取问题
你的问题出在Android项目的资源打包机制上——src/main/logo这种自定义的源码目录,默认不会被Android构建工具处理并打包到APK的可访问文件系统中,所以你直接用相对路径创建File对象,肯定找不到对应的图片文件。下面给你两种针对性的解决方案:
方案一:把logo文件夹作为静态资源目录处理(适合打包时就包含的图片)
首先修改你的Module级别的build.gradle文件,让构建工具识别src/main/logo为资源目录:
android { sourceSets { main { // 添加自定义资源目录 res.srcDirs += 'src/main/logo' } } }
同步Gradle之后,这个文件夹里的图片会被当成普通的drawable资源处理。之后你可以通过资源ID来加载图片,比直接读File更高效也更符合Android的资源规范:
// 根据图片名称获取资源ID int logoResId = getResources().getIdentifier("ataturk", "drawable", getPackageName()); if (logoResId != 0) { ImageView imgLogo = myView.findViewById(R.id.imageView_logo); imgLogo.setImageResource(logoResId); }
注意:如果你的图片有不同分辨率的版本,建议在logo文件夹下再创建类似
drawable-mdpi、drawable-hdpi这样的子目录,和标准资源目录结构保持一致。
方案二:如果图片是动态文件(运行时生成/下载)
如果这些图片是运行时才会存在的动态文件,那你不能把它们放在src/main目录下,应该放到应用的内部存储或者外部存储目录中。比如用内部存储的示例代码:
// 获取应用内部存储的files目录 File logoDir = new File(getFilesDir(), "logo"); // 确保目录存在 if (!logoDir.exists()) { logoDir.mkdirs(); } // 构建图片文件路径 File imgFile = new File(logoDir, "ataturk.png"); if (imgFile.exists()) { ImageView imgLogo = myView.findViewById(R.id.imageView_logo); Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); imgLogo.setImageBitmap(myBitmap); }
为什么你的原代码不工作?
你写的src/main/logo/ataturk.png是项目源码的相对路径,但Android应用运行时的工作目录是APK的沙箱目录,和你的项目源码目录完全不是一回事,所以这个路径在设备上根本不存在,自然找不到文件。
内容的提问来源于stack exchange,提问作者Lomado
相关产品推荐
相关产品推荐

