• 精通android(Pro Android 4)面试题总结(二)


    第三章

    1.我们可以命名的资源种类有多少?

     答:主要有10种常用的。

      1.颜色。values/any-file(任意命名文件),通过R.color.*引用。文件中的xml中节点为/resources/color。

      2.字符串。values/any-file,通过R.string.*引用。文件中的xml中节点为/resources/string。

      3.字符串数组。values/any-file,通过R.array.*引用,文件中的xml中节点为/resources/string-array。

      4.复数(plural)。values/any-file,通过R.plural.*引用。文件中的xml中节点为/resources/plurals。

      5.尺寸。values/any-file,通过R.dimen.*引用。文件中的xml中节点为/resources/dimen。

      6.图像。drawable/multiple-file(多个文件可以复用,一个文件中含嵌套另一个文件),通过R.drawable.*引用。文件中的id资源为图像名称。

      7.色图(Color Drawable)。 可以在values/any-file 或者是 /drawable/multiple-files下面。通过R.drawable.*引用,文件中xml中节点为/resources/drawable  (还可以在res/drawable/放置含XML标记的<shape>的xml文件,支持圆角矩形和渐变矩形)。

      8.任意XML文件。/res/xml/,通过R.xml.*引用。android允许将任意XML文件用作资源,这些文件使用aapt编译。

      9.任意原始资源。/res/raw。通过R.raw.*引用,android支持此目录下的任意未编译的的二进制文件或文本文件(每个文件都会获得一个唯一的资源id)。

      10.任意原始资产。/assets/ 。注意:android支持/assets子目录下任意子目录中的任意文件。这些文件不是真正的资源,只是原始文件。

    2.R.java是什么?

     答:android中的R.java是android编译器自动生成的文件。它是资源文件引用id的索引。与res文件下的各种资源对应着一个资源标识符,通过它来在java文件中引用资源。

    3.为什么R.java如此方便地用于处理资源?

     答:android中的资源会在编译过程中被打包进APK中(res文件夹)或者被打包成独立的资源APK包(比如framework-res.apk)。这些资源都会被赋予独一无二的ID即资源索引 来方便系统访问。资源索引由Android的工具AAPT(Android Asset Packing Tool)生成的八位十六进制整数型。

                                                      


    中间 02 所在位置值代表资源ID对应的资源的类型,分别是:
                          02:drawable
                          03:layout
                          04:values
                          05:xml
                          06:raw
                          07:color
                          08:menu

    这个final int bar 会生成在R.java文件当中。因此我们便可以方便地处理资源。

    4.资源引用语法和为UI控件分配ID之间有什么联系?

     答:资源引用就是通过UI控件分配的ID来索引具体的UI控件。

    5.生成资源ID时会使用文件扩展名吗?

     答:不会使用。

    6.如果两个基于文件的资源只有扩展名不同,结果会怎么样?

     答:不能用文件扩展名来区别不同的文件,因为R.java中只保留资源的文件名而不管扩展名。如果两个文件在同一文件下会报错,编译失败。

    7.什么是原始资源和XML资源,它们与asset有什么不同?

     答:原始资源:res/raw/  通常为mp3,txt等  R.raw.id XML资源:xml  R.xml.id (XML保存的数据资源) asset: 直接通过assetmanager打开。不会生成id,与res同级 assets目录下的文件不会被映射到R.java中,即系统不会自动为其生成一个资源ID.另一方面,由于系统会为res目录下的所有资源生成相应的资源ID,所以raw中的文件也不例外。因此,我们可以通过ID去访问res/raw目录中的任何文件,而assets目录中的文件就需要借助AssetManager去访问了。assets目录允许下面有多级子目录,而res/raw下不允许存在目录结构。

    8.XML资源能否本地化?

     答:可以(如语言可以根据不同的XML文件来判定)。

    9.Asset能否本地化?

     答:不能。asset可以有任意子目录,而res下面只能有文件。并且R.java需要以此来生成id,才能实现本地化。

    10.你能否写出并解释资源引用语法?

     答:R.resource_type.resource_name。因为R.java 中资源索引类都是静态类,所以能直接通过R.resource_type.resource_name来获得索引地址的值。

    11.能否预先声明控件ID?如果能,为什么?

    答:可以。在values新建立ids.xml,把id在这里声明:<item type="id" name="right">false</item>。使用的时候就是@id 而不是@+id。因为R.java 文件不可以编辑,当ids.xml文件在R.java中生成索引时就可以重复使用,当生成控件时就可以直接绑定。

    12.哪些XML节点可以用于创建ID?

    答:这个比较多,常见的有:LinearLayout、RelativeLayout、Button、ImageView等常用的布局控件。

    13.如果将文件保存在XML和原始目录中,Android是否会在R.java中为这些文件生成ID?

    答:保存在XML目录中的文件会基于文件名生成id,而保存在原始目录下的文件不会生成id。

    14.Android是否会为asset目录的文件生成ID?

    答:不会,保存在原始目录下的文件不会生成id。

    15.Plurals资源的1和其他的意义是什么?

    答:帮助我们识别复数的时候使用,1表示单个,other表示其他个:0个,或者>=2。

    16.字符串资源中是否可以使用HTML字符串?

    答:可以。如:<string name="welcome">Welcome to <b>Android</b>!</string>

    17.如何在文字视图中显示HTML字符串?

    答:有时可能要创建一个样式化的文本资源,并可作为格式化串使用。通常这不能生效,因为String.format(String, Object...)方法会去除字符串内的所有的样式信息。解决方法是写入一段转义后的HTML标记,然后在格式化后再用fromHtml(String)恢复出这些样式。例如:

    (1)将样式化的文本资源存储为转义后的HTML字符串:
       <resources>
         <string name="welcome_messages">Hello, %1$s! You have &lt;b>%2$d new messages&lt;/b>.</string>
      </resources>

           在这个格式化字符串里,加入了一个<b>元素。注意左尖括号是用标记&lt转义过的HTML。

    (2)然后,按照通常方式格式化字符串,并调用fromHtml(String) 把HTML文本转换成带样式的文本。
        Resources res = getResources();
        String text = String.format(res.getString(R.string.welcome_messages), username,mailCount);
       CharSequence styledText = Html.fromHtml(text);

       因为fromHtml(String)方法会格式化所有的HTML内容,所以要确保用htmlEncode(String)对带格式化文本的字符串内所有可能的HTML字符进行转义。
       比如,如果要把可能包含诸如“<”或“&”等字符的串作为参数传给String.format(),那么必须在格式化之前对这些字符进行转义。
       格式化后,再把字符串传入fromHtml(String),这些特殊字符就能还原成本来意义了。例如:
        String escapedUsername = TextUtil.htmlEncode(username)
        Resources res = getResources();
        String text = String.format(res.getString(R.string.welcome_messages), escapedUsername,mailCount);
        CharSequence styledText = Html.fromHtml(text);

    18.如何定义一个可以拖拽的矩形?

     答:使用Draw 9-patch工具生成9.PNG图片格式。

    19.如何使用一个可以拖拽的形状?

    答:在可以拖拽的方向,可以不设限设置长度。

    20.哪一个类可用于读取/res/xml目录的XML文件?

    答:通过activity.getresource().getxml(resId)。

    21.在Android中处理XML文件的主类是什么?

    答:XmlPullParser。

    22.AssetManager类有什么作用,如何使用这个类?

    答:读取assets文件下的内容。

    23.Resources类有什么作用,如何创建它的实例?

    答:Resources即Android资源文件。Android的资源文件,是由目录结构,Xml格式的文件,和纯数据文件构成。Android的资源文件,只要是和界面相关的,都可以用资源文件表示,比如:UI的样式,菜单,配置文件,各种描述性字符串,图片,音频视频文件,动画,颜色,尺寸,风格和样式等。通过context.getResources()可以获取它的实例。

    24.可否在assets文件夹内创建任意子目录?

    答:可以。

    25.可否在/res/xml资源文件夹下创建子目录?

    答:不可以。

    26.什么是资源配置修饰符?

    答:mccAAA: AAA是移动设备国家代码。

        mcnAAA: AAA是运营商/网络代码。

        en-rUS: 语言和区域。

        sw<N>dp、w<N>dp、h<N>dp:最小带宽、可用网络及可用高度(始于API13)

        small、normal、large、xlarge:屏幕大小

        long、notlong:屏幕类型。

        port、land:纵向或横向。

        car、desk:扩展坞类型。

        night、notnight:晚上或白天

        ldpi、mdpi、hdpi、xhdpi、nodpi、tvdpi:屏幕像素密度。

        notouch、stylus、finger:屏幕种类。

        keysexposed、keyssoft、keyshidden:键盘种类。

        nokeys、qwerty、12key:键数。

        navexposed、navhidden:隐藏或显示导航键。

        nonav、dpad、trackball、wheel:导航设备类型。

        v3、v4、v7:API 级别。

  • 相关阅读:
    CF1537C Challenging Cliffs
    CF1454E Number of Simple Paths
    六、链表
    AOP中的一些概念
    Autowired查找顺序
    webpack配置babel
    selenium处理iframe下 #document 标签
    Soul 网关 Nacos 数据同步源码解析
    安装ssl证书后,部分浏览器提示你的链接不安全,服务器应使用tls1.2或更高版本
    php 安装 imagick扩展失败 ,phpinfo一直不显示
  • 原文地址:https://www.cnblogs.com/anumbrella/p/4886682.html
Copyright © 2020-2023  润新知