• @代表引用资源. 1、引用自定义资源:比如说定义text 格式为“@string/name” 2、引用系统资源:比如说设置文本颜色,就是"@android:color/darker_gray" 其实也就是引用系统资源是引用自定义资源的一个子类.@*代表引用...

    @代表引用资源.

    • 1、引用自定义资源:比如说定义text 格式为“@string/name”

    • 2、引用系统资源:比如说设置文本颜色,就是"@android:color/darker_gray"

    其实也就是引用系统资源是引用自定义资源的一个子类.

    @*代表引用系统的非public资源.

    系统资源定义分为public和非public

    public 的声明在SDK的文件夹里面,路径是platfroms/android/data/res/values/public.xml

    @*android:type/name:可以调用系统定义的所有资源

    @android:type/name:只能够调用public属性的资源

    需要注意的是:没在public.xml中声明的资源是google不推荐使用的

    ?代表引用主题属性.

    另外一种资源值允许你引用当前主题中的属性的值。这个属性值只能在style资源和XML属性中使用;它允许你通过将它们改变为当前主题提供的标准变化来改变UI元素的外观,而不是提供具体的值。
    当你使用这个标记,你所提供的资源名必须能够在主属性中找到,因为资源工具认为这个资源属性是被期望得到的,不需要明确的指出它的类型(也就是不需要写全在哪个文件中).
    例如:

      android:textColor="?android:textDisabledColor" 

    主题属性可以在SDK的 values 找到attrs.xml文件

    Android系统也为Theme 定义了很多属性

    每个主题属性名称 都对应SDK/values目录下的themes.xml文件中,当用到主题属性的时候,可以直接在?后面加上属性名。

    @+代表在创建资源

    +表示在R.java中名type的内部类中加一条记录.

    如@+id/button—就是在R.java文件中的id这个静态内部类添加一条常量button,该常量就是该资源的标识符.

    @+id/资源ID名—新建一个资源ID

    @id/资源ID名—应用现有已定的资源的ID,包括系统ID

    @android:id/资源ID名—引用系统ID,同@id/资源ID名

    展开全文
  • 论坛上有人说导出的jar包中无法包含Drawable等资源文件,一些图片等数据,需要放到Assert文件中使用。 其实,关于这个问题,我做了尝试: 首先,需要说明导出jar包含什么文件是由你导出时选择来决定的,比如下图:...

    试过以下几种方式解决:

    1、从插件程序中导出jar包
    论坛上有人说导出的jar包中无法包含Drawable等资源文件,一些图片等数据,需要放到Assert文件中使用。
    其实,关于这个问题,我做了尝试:
    首先,需要说明导出jar包含什么文件是由你导出时选择来决定的,比如下图:
    android <wbr>关于生成jar包的问题
    如果你选择了res文件夹,则打包出的jar文件是可以包含res文件到。

    但是包含文件并不代表可以使用。如果你想当然在插件程序中使用R.drawable.XXXX等方式获取
    资源会报错!
    当然别人通过R.XX.XX也只能看到自己的资源文件,而无法获取jar中的资源文件。

    2、获取jar包中的文件

    虽然无法直接引用资源文件,但是如果外边程序想获取某个资源文件时,也是可行的。
    其原理是以数据流读取jar中指定的文件。
    比如读取Assert文件下的icon.jpg文件:
    你可以在插件中封装一个对外的方法:
        publicstatic Drawable getAssertDrawable(Context context,StringfileName){
           try {
              InputStreaminStream=context.getAssets().open(fileName);
              return newBitmapDrawable(BitmapFactory.decodeStream(inStream));
           } catch(IOException e) {
             Log.e(LOG_TAG, "Assert中"+fileName+"不存在");
           }
           returnnull;
        }
    直接使用该方法可以得到文件。
    后来又尝试在外部程序,直接使用context.getAssets().open(fileName)方法获取jar中文件,
    让人喜出望外的是竟然成功了。呵呵!
    后来分析,外部程序编译时,其实连同jar包中内容一起混编。jar包中的Assert文件会同外部程序的Assert一起
    由AssertManager管理。
    所以当你jar包中Assert内部文件和外部Assert中的文件有命名冲突时,编译器会报错的。

    另外,还有人提供另外一种方法来读取诸如Drawable等文件夹下的文件。
        publicstatic Drawable getDrawableForJar(String resName,Classclass){
           InputStreaminStream=class.getResourceAsStream(resName);
           return newBitmapDrawable(BitmapFactory.decodeStream(inStream));
        }
    使用class.getResourceAsStream()方法读取,注意这里resName是文件的相对路径,比如jar根目录下res/drawable/icon.png,
    则调用方法为:class.getResourceAsStream(/res/drawable/icon.png);

    这里主要是采用ClassLoader的下面几个方法来实现:

      public URL getResource(String name);

      public InputStream getResourceAsStream(String name)

      public static InputStreamgetSystemResourceAsStream(String name)

      public static URL getSystemResource(String name)

      后两个方法可以看出是静态的方法,这几个方法都可以从Jar中读取图片资源,但是对与动画的gif文件,笔者在尝试过程中发现,存在一些差异。

      String gifName为Gif文件在Jar中的相对路径。

      (1)使用了两个静态方法

      BufferedImageimage = ImageIO.read(ClassLoader.getSystemResourceAsStream(gifName));

      或者

      Image image = Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource(gifName));

      这两种方式可以成功地读取gif文件,但是对于gif动画,显示出来地是静态的。

      (2)使用其他两个方法

      Image image = Toolkit.getDefaultToolkit().getImage( this .getClass.getClassLoader()
    .getResource(gifName));

      再这种方式下动画可以正常显示了。


    3、使用library方法加载资源文件 

    在论坛中看到帖子讲述如何把工程作为libarary,让其他工程添加library,编译后会自动生成jar,然后在哪来使用。 
    当时看到此贴,喜出望外,所以赶紧尝试下! 

    方法:选择插件工程,右键选择属性,选择Android,勾选下面Is Liabrary选项。 
    然后,选择我们现有的工程,右键属性,选择Android,在library下add相应的库。你会看到,刚才我们设置的插件项目,就在其中。最后,点击应用,完成。 

    详细步骤: 

    按如下方法设置:

    1. 假设要引用的android工程叫LibProject,引入到的工程叫MainProject;

    2.设置LibProject,右键->Properties->Android,将Islibrary项选中,然后Apply;

    3.设置MainProject,右键->->Properties->Android,在Library中,点击Add按钮,将LibProject工程加入,Apply即可。



    你会看到我们的工程中多出插件工程的引用,而且可以使用R.XXX.XXX获取资源文件。 

    以为可以解决了,但是发现并没有生成想要的jar文件。在插件工程中,倒是有编译的class文件,却没有jar包。 
    而我们往往是不能像这样把原工程给别人直接引用的。 
    经过多次试验,始终没有生成jar,非常奇怪别人怎么弄得。。。 

    另外,拿以前通过这种方式生成的jar文件看,里面也不包含资源文件夹。。 

    所以最终确定,这种方式无法实现需求。 
    展开全文
  • 到这边应该没问题吧 网上都是这样做的 然后我要在ActivityB中来调用这个jar包中的那个Test方法 该怎么调用啊 网上有说直接 包名.类名.方法名就行了 可是我test.Test.Test(string) 不行啊 怎么在B中去调用jar包中的...
  • Android中可以将资源文件放在assets目录(可以有子目录)中和程序一起打包为jar,在其他项目引用时可以只引用jar包,不需要导入资源文件,在编译应用时会将jar包assets目录中的文件跟应用中的assets目录中的文件合并...

        在Android中可以将资源文件放在assets目录(可以有子目录)中和程序一起打包为jar,在其他项目引用时可以只引用jar包,不需要导入资源文件,在编译应用时会将jar包assets目录中的文件跟应用中的assets目录中的文件合并,如果jar中的文件和应用中的文件重名在编译的时候会报错“Error generating final archive: Found duplicate file for APK”提示有重名文件。

    然后就可以应用中通过如下方法获取资源文件

    Drawable.createFromStream(am.open("login_btn_src_pressed.png"), "login_btn_src_pressed")

    其中的am对象为AssetManager实例,通过Activity.getAssets()获得,用来访问assets目录资源

    转载于:https://my.oschina.net/u/614511/blog/76957

    展开全文
  • 关于在Android项目上引用兼容包里主题资源报错问题解决方法

    最近在做demo的时候遇到一个错误,虽然不是很难,但是网上这样错误的解决方法也并不多(我是没有找到,度娘不给力)!!先看一下报什么错吧!!
    这里写图片描述

    这里写图片描述

    错误也很普通,这些引用的都是系统的东西,一旦出现找不到八成就是资源导入的问题了!!
    解决方法:

    修改Android.mk文件:
    添加这三行:
    LOCAL_STATIC_JAVA_LIBRARIES := android-support-v7-appcompat

    LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res \
    framework/support/v7/appcompat/res

    LOCAL_AAPT_FLAGS := –extra-packages androdi.support.v7.appcompat –auto-add-overlay

    然后保存,重新单编apk,问题解决!!希望这种解决方法可以帮到你!!!

    展开全文
  • Android中可以将资源文件放在assets目录(可以有子目录)中和程序一起打包为jar,在其他项目引用时可以只引用jar包,不需要导入资源文件,在编译应用时会将jar包assets目录中的文件跟应用中的assets目录中的文件合并...

    Android中可以将资源文件放在assets目录(可以有子目录)中和程序一起打包为jar,在其他项目引用时可以只引用jar包,不需要导入资源文件,在编译应用时会将jar包assets目录中的文件跟应用中的assets目录中的文件合并,如果jar中的文件和应用中的文件重名在编译的时候会报错“Error generating final archive: Found duplicate file for APK”提示有重名文件。
    然后就可以应用中通过如下方法获取资源文件
    Drawable.createFromStream(am.open("login_btn_src_pressed.png"), "login_btn_src_pressed")
    其中的am对象为AssetManager实例,通过Activity.getAssets()获得,用来访问assets目录资源

    相关内容:

    Android 快速调用系统自带程序发送彩信实现

    展开全文
  • 本文参考于http://www.cnblogs.com/greatverve/archive/2011/12/27/Android-xml.html,
  • 最近在使用Android studio 的过程中,偶尔会发生,资源文件存在(比如字符串,或者照片,颜色),但引用的时候,一直报无法解析该资源。试了很多方法,总算解决了,可能是studio 缓存造成的 .记录一下,以便他人和...
  • 一:同步加载其中一个资源 T objectFromBundle=assetBundle.LoadAsset<T>(string assetName) 二:同步加载所有资源 T[]objectsFromBundle=assetBundle.LoadAllAssets<T>() 三:异步加载其中一个资源...
  • 1、将要引用的工程设置成library并引入 1)将要引用的工程设置成library 2)将其引入到目标工程中 2、将要引入的工程的资源文件引入到目标工程
  • 这个项目里面用到Notification,用过notification的人都知道,notification必须设置小图标setSmallIcon(int icon),参数icon就是资源文件的Id。于是很简单,我把需要的资源文件一起打包成jar包就可以了;可是老大说...
  • android系统中引用资源有几种方式,常用的有“@”“@+”引用具体资源的方式。也有“?”"?attr"等引用主题属性的方式,方式多了容易乱,为保持思路清晰,总结之。引用格式分解:android:background="@color/light_red...
  • 随着项目越来越多,代码的复用就变得异常重要,这时候就要进行... Library,在Gradle出现之前引用Android Library的方式也很繁琐,但是有了Gradle一切变得非常简单方便。  aar  何为aar?大家都知道jar文件把,如
  • Android中的资源

    2017-05-22 17:17:31
    学习内容Ø Android中的各种资源Ø 国际化及资源自适应 能力目标Ø 了解Android资源的种类Ø 掌握Dimension资源、Assets资源的使用Ø 掌握样式和主题资源的使用Ø 熟练掌握国际化和屏幕适配 本章简介 ...
  • Android studio 3.0 之前新建一个App,新建一个Libs库,App引用Libs库,compile project(':xxxLib'); App就可以引用Libs 中的资源了 ...引用Libs库中的资源引用不到libs包下面的xxx.jar包中的类资源
  • 使用android studio生成jar包,并且使用映射来完美调用资源文件。包含两个工程,一个如何生成jar包,一个是如何使用jar包,调用资源文件。使用详情可以关注我的blog,http://blog.csdn.net/jujishou521
  • 原生资源是指除了图片(png/jpg/gif)和xml文档(包括自定义的和Android规定格式的)以外的服务于Android程序的各种原始格式的文件,包括音频、视频、字体、数据库、文本等等各种文件。它们不需要额外的定义,只需把...
  • 只作收藏,原文:... android 关于生成jar包的问题 (2012-03-20 11:42:22) 转载▼ 相关:http://blog.sina.com.cn/s/blog_5da93c8f010193ql.html   背景:工作中需要开发一个广告插件,并提供给
  • 我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等)。在单独运行的时候这些简单的处理当然不会有问题。但是,如果我们把代码打成一个jar包以后,即使将资源文件一并打包,这些东西也找不出来了。看看下面...
  • xml文件内引用资源

    2011-01-01 20:35:55
    xml文件内引用资源 1) 引用自定义的资源  android:text="...在这种情况下,我们不需要指定包名,因为我们引用的是我们自己包中资源。type是xml子节点名,name是xml属性名: &lt;?xml ...
1 2 3 4 5 ... 20
收藏数 9,250
精华内容 3,700
关键字:

引用android包中的资源