首页
学习
活动
专区
圈层
工具
发布

Android根据资源名获取资源ID

接触过Android开发的同学们都知道在Android中访问程序资源基本都是通过资源ID来访问。这样开发起来很简单,并且可以不去考虑各种分辨率,语言等不同资源显式指定。...痛点 但是,有时候也会有一些问题,比如我们根据服务器端的值取图片,但是服务器端绝对不会返回给我们的是资源id,最多是一种和文件名相关联的值,操作资源少的时候,可以维护一个容器进行值与资源ID的映射,但是多的话...便捷的方法 在这种情况下,使用文件名来得到资源ID显得事半功倍。 通过调用Resources的getIdentifier可以很轻松地得到资源ID。...ID 完整的资源名为package:type/entry,如果资源名这个参数有完整地指定,后面的defType和defPackage可以省略。...defType和defPackage省略时,需要将其设置成null 注意这个方法不提倡,因为直接通过资源ID访问资源会更加效率高 如果资源没有找到,返回0,在Android资源ID中0不是合法的资源ID

4K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Android 安装包优化】资源混淆 ( 资源混淆效果 | APK 构建流程简介 | 资源 ID 组成 )

    文章目录 一、资源混淆效果 二、APK 构建流程简介 三、资源 ID 组成 四、参考资料 一、资源混淆效果 ---- 资源混淆 , 将资源名称与目录进行混淆 , 提高了反编译的难度 , 同时也减小了 APK...文件的大小 ; 下面的 APK 安装文件就是进行资源混淆 , 其中的 r 文件 , 就是混淆后的资源文件 ; 进入 r 文件内部 , 可以看到很多无意义无规则的目录 , 这是混淆后的资源文件 ;...) 进行编译 , 最后打包成 APK 文件 ; 资源文件在打包时会进行编译 , 将资源文件编译成二进制文件 , 直接打开资源文件都是二进制乱码 ; 三、资源 ID 组成 ---- Android 应用编译时会生成...R 文件中的一个 ID , 以 0x7f010000 为例 , ID 的格式分为三部分 , 7f | 01 | 0000 , 7f 表示包 , 一般的程序的包都会被编译成 7f 开头 ; 01 对应资源类型.../studio/build/shrink-code APK 构建流程 : https://developer.android.google.cn/studio/build 参考之前的博客资源 : 【Android

    1.8K20

    Android中的序列化:Parcelable和Serializable

    Parcelable的设计初衷是因为Serializable效率过慢,为了在程序内不同组件间以及不同Android程序间(AIDL)高效的传输数据而设计,这些数据仅在内存中存在,Parcelable是通过...Parcelable差; Parcelable是以IBinder作为信息载体的。...在内存上的开销比较小,因此内存直接进行数据传递的时候,Android推荐使用Parcelable; 在读写数据的时候,Parcelable是在内存中直接进行读写,而Serializable是通过IO流的形式将数据写入到硬盘上...,所以在需要保存或网络传输数据时选择Serializable,因为Android不同版本Parcelable可能不同,所以不推荐使用Parcelable进行数据持久化。.../reference/java/io/Serializable https://developer.android.com/reference/android/os/Parcelable https:/

    86610

    【Android 安装包优化】移除无用资源 ( 自动移除无用资源 | 直接引用资源 | 动态获取资源 id | Lint 检查资源 )

    文章目录 一、自动移除无用资源 ( 不推荐使用 ) 二、直接引用资源与动态获取资源 1、直接引用资源 2、动态获取资源 id 三、Lint 检查资源 四、参考资料 一、自动移除无用资源 ( 不推荐使用...) ---- 自动移除无用资源 : Android Studio 重构工具中 , 给出了一个自动移除无用资源的工具 , 可以一键移除没有被引用的资源 ; " 菜单栏 / Refactor / Remove...:id="@+id/first_image" android:layout_width="100dip" android:layout_height="100dip"...id 动态获取图片资源示例 : 该获取的资源值就是 R.drawable.ic_plane 值 , 是 int 类型 ; // 动态获取图片资源 int var drawable2..., 则显示在 " Inspection Result " 面板中 , 面板右侧可以选择对该未引用的资源处理 , 此处可以对不同的资源进行不同处理 , 如果确定某个资源没有使用过 , 可以是手动删除该资源

    1.7K40

    Android序列化总结

    另外,系统的默认序列化过程是可以改变的,通过实现如下4个方法,即可以控制系统的默认序列化和反序列过程: public class User implements Serializable {...Parcelable 鉴于Serializable在内存序列化上开销比较大,而内存资源属于android系统中的稀有资源(android系统分配给每个应用的内存开销都是有限的),为此android中提供了...而Android的Parcelable的设计初衷是由于Serializable效率过低,消耗大,而android中数据传递主要是在内存环境中(内存属于android中的稀有资源),因此Parcelable...接口类,就得去编写一次重复的代码,这显然是不可取的,不过幸运的是,android studio 提供了自动实现Parcelable接口的方法的插件,相当实现,我们只需要打开Setting,找到plugin...插件,然后搜索Parcelable插件,最后找到android Parcelable code generator 安装即可: ?

    92620

    Android 序列化 Serializable与Parcelable

    另外,系统的默认序列化过程是可以改变的,通过实现如下4个方法,即可以控制系统的默认序列化和反序列过程: public class User implements Serializable {...实现Parcelable接口 由于Serializable在内存序列化上开销比较大,而内存资源属于android系统中的稀有资源(android系统分配给每个应用的内存开销都是有限的),为此android...而Android的Parcelable的设计初衷是由于Serializable效率过低,消耗大,而android中数据传递主要是在内存环境中(内存属于android中的稀有资源),因此Parcelable...Parcelable也不是不可以在网络中传输,只不过实现和操作过程过于麻烦并且为了防止android版本不同而导致Parcelable可能不同的情况,因此在序列化到存储设备或者网络传输方面还是尽量选择Serializable...AndroidStudio中的快捷生成方式 (1)AndroidStudio快捷生成Parcelable代码 android studio 提供了自动实现Parcelable接口的方法的插件,相当实现,

    2.2K60

    漫谈序列化—使用、原理、问题

    如果我们不写的话,在我们修改类的某些属性之后,serialVersionUID就会改变。...所以,为了提高在Android中对象传输的效率呢,Android就采用了新的序列化方式——Parcelable。...Parcelable Parcelable是Android为我们提供的序列化的接口,是为了解决Serializable在序列化的过程中消耗资源严重,而Android本身的内存比较紧缺的问题,但是用法较为繁琐...比如: Bundle.putParcelable, Intent putExtra(String name, Parcelable value) 等等吧,基本上对象传输的方法都支持了,所以这也是Parcelable...),并且每个对象有10个以上属性时,并且Serializable实现了writeObject()以及readObject(),在平均每台安卓设备上,Serializable序列化速度大于Parcelable

    99220

    Android 中文 API (29) —— CompoundButton

    public Parcelable onSaveInstanceState () 允许视图生成一个代表内部的状态,以后可用于创建一个与之相同的新的实例。...这种状态应该只包含非持久或以后不能够重建的信息。例如,你决不存储你当前在屏幕上的位置,因为这会在视图的层面上重新计算放置一个新的实例。...返回值 返回一个包含视图当前状态的Parcelable对象,或没有什么状态保存时返回null。默认实现返回null。...) 通过资源Id给按钮背景设置一个图像 参数 resid 作为背景图像的资源id public void setChecked...listener 当选中状态改变时调用的函数 public void toggle () 改变选中状态为当前状态的逆状态   四、受保护方法 protected void drawableStateChanged

    1.5K30

    Android中的资源

    Ø 对于较大的资源,我们可以将其作为外部文件单独发布,应用程序可以从手机的内存卡或SD卡中读写这些资源文件,还有一些资源在程序运行后也可以将其复制到手机内存或SD卡上再读写。...在Java代码中引用系统资源的格式为:android.R.资源的种类.资源的ID。 在XML布局文件中引用系统资源的格式:@android: 资源的种类/资源的ID。 ​...需要注意的是这些资源会在R文件中生成对应的ID,在程序中使用这些资源时要通过这个生成的ID,语法格式是: getResources().openRawResource(ID) 有关raw资源的具体使用...屏幕适配是非常有用的一种技术,它能从很大程序上提高我们软件的应用范围。 ​示例8.7​ 演示屏幕自适应。...2:为用户登录程序添加样式和主题选择功能 ​训练技能点​ 样式和主题资源 ​需求说明​ 在Windows中,我们可以通过设置不同的主题来改变系统的显示样式,从而避免审美疲劳,提高了使用体验。

    49310

    Fragment找不到资源Id引起的线上Crash

    一、问题起因线上报了较多Fragment资源id找不到的Crash。...找到对应资源int id fl_about_container 0x7f090283图片从堆栈看全部在系统调用,首先想到先结合异常源码看看:图片从代码片段看是当前Fragment.mContainerId...再结合业务代码看:图片图片该Fragment没有其他逻辑,布局也很简单,按道理,不应该存在资源找不到的情况。。。自此基本没法分析问题出现的场景以及根因。...R.id.fl_settings_container,而Crash的直接堆栈就是报这个id找不到,所以这里可以大胆猜测发生了SettingsFragment替换了AboutContainerFragment...第二个参数是false,说明是不加入历史堆栈的,所以在进入“关于片多多”的Fragment和Crash发生前dump的历史操作堆栈是没有记录AboutFragment的replace操作的到这里基本上把重要信息都拿到了

    1.2K40

    Android CompoundButton

    android.widget.Button      android.widget.CompoundButton RadioGroup不是CompoundButton的子类,所以不能直接使用CompoundButton...public Parcelable onSaveInstanceState () 允许视图生成一个代表内部的状态,以后可用于创建一个与之相同的新的实例。...这种状态应该只包含非持久或以后不能够重建的信息。例如,你决不存储你当前在屏幕上的位置,因为这会在视图的层面上重新计算放置一个新的实例。...(如:图像) 参数 d 用作背景的可绘制对象(如:图像) public void setButtonDrawable (int resid) 通过资源Id给按钮背景设置一个图像 参数 resid...作为背景图像的资源id public void setChecked (boolean checked) 改变按钮的选中状态 参数 checked true选中,false非选中 public

    1K20

    Android Studio最全插件整理

    在Android开发中,合理的使用Android Studio插件不但可以提高开发效率,还能从整体上提高代码的质量。下面就Android开发中常见的一些插件做一个整理。...在Activity,Fragment,Adapter中选中布局xml的资源id自动生成butterknife注解。 ?...4,Android Parcelable code generator Parcelable是Android实体类的一种实例化方式。 ? 5,Android Methods Count ?...16,Android Postfix Completion 可根据后缀快速完成代码,这个属于拓展吧,系统已经有这些功能,如sout、notnull等,这个插件在原有的基础上增添了一些新的功能,我更想做的是通过原作者的代码自己定制功能...30,AndroidLocalizationer 可用于将项目中的 string 资源自动翻译为其他语言的 Android Studio/IntelliJ IDEA 插件。 ? ?

    1.4K40

    货拉拉 Android 动态资源管理系统原理与实践(上)

    ❞ 前言 随着公司业务的扩展,货拉拉用户端apk包的体积也不断变大,过去一年,用户端android组进行了大量的瘦身工作,取得了较为显著的成果。再使用常规方法,已经很难优化包体积了。...下载过程的恢复和断点续传,需要下载接口的实现者负责。 其他状态,我们在状态改变时,将资源id,当前状态和待处理文件路径,保存到数据库。 每次加载动态开始时,根据资源id查找数据库中是否有待恢复数据。...根据资源id,从缓存中获取动态资源对应的本地文件。 文件获取成功,直接设置到view上,获取失败,进入下一步。 参数列表中的占位资源不为空,则将占位资源设置到View上。...将资源id设置到View的tag上,尝试清除上次动态资源加载失败状态。 使用管理器Manager类的load方法,执行之前的加载流程。...异步等待加载完成回调,判断资源id是否和View的tag相同,防止view被复用,导致的资源错乱情况。 如果Activity没有被销毁,则将资源设置到View上。

    1.2K31

    Android开发笔记(二十七)对象序列化

    像上节《Android开发笔记(二十六)Java的容器类》中介绍的Java容器类,从队列到映射,其实在各自的基类容器之外,也都实现了Serializable接口。...实现简单的Serializable接口无需自己重写任何序列化函数,只要提供一个序列化版本的id(serialVersionUID),Java便会对这个对象进行高效的序列化操作。...Parcelable Parcelable的设计初衷,便是因为Serializable方式较耗资源且执行速度偏慢,为此Android设计了Parcelable用于组件之间的消息传递(包括线程间传递与进程间传递...采用Parcelable方式的类,需要自己定义如何打包(写数据)和解包(读数据),其余的序列化操作则由底层实现。...对象代码 import android.os.Parcel; import android.os.Parcelable; public class ParData implements Parcelable

    70940

    Serializable和Parcelable的再次回忆

    前者需要相同的序列化方式,后者需要知道秘钥。 Android中将对象序列化的方式有两种Serializable和Parcelable这两个接口都可以完成。...Serializable是Java自带的序列化方法,而Android原生的序列化为Parcelable。...(PS:Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC),而内存资源属于android系统中的稀有资源(android系统分配给每个应用的内存开销都是有限的),为此android...而Parcelable是Android中序列化方法,因为更适合于在Android平台上,它的缺点就是使用起来比较麻烦,但是它的效率很高,这是Android推荐的序列化方法,因为我们要首选Parcelable...Parcelable主要用于内存序列化上,通过Parcelable将对象序列化到存储设备中或者将对象序列化后通过网络传输也都是可以的,但是这个过程稍显复杂,因此在这两种情况下建议使用Serializable

    66820
    领券