`
iaiai
  • 浏览: 2195620 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android XML文件使用

 
阅读更多
一、布局文件:在layout目录下,使用比较广泛;

  我们可以为应用定义两套或多套布局,例如:可以新建目录layout_land(代表手机横屏布局),layout_port(代表手机竖屏布局),系统会根据不同情况自动找到最合适的布局文件,但是在同一界面的两套不同布局文件的文件名应该是相同的,只是放在了两个不同的目录下。

二、图片文件:在drawable目录下,从2.1版本以后分为三个目录

  • drawable-hdpi里面存放高分辨率的图片,如WVGA (480×800),FWVGA (480×854)
  • drawable-mdpi里面存放中等分辨率的图片,如HVGA (320×480)
  • drawable-ldpi里面存放低分辨率的图片,如QVGA (240×320)

系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。 

在开发程序时为了兼容不同平台不同屏幕,建议各自文件夹根据需求均存放不同版本图片。
我们可以将已经做好的图片放到该目录下,或者通过自定义XML文件来实现想要的图片,例如我们可以定义shapge_1.xml放到drawable目录下,内容如下:
<shape xmlns:android="http://schemas.android.com/apk/res/android"   android:shape="oval"> 
<!--android:shape="oval"表示所要绘制的图形是一个椭圆,默认是rectangle,长方形-->
<gradient 
    android:startColor="#0055ff88" 
    android:centerColor="#0055ff00" 
    android:centerY="0.75" 
    android:endColor="#00320077" 
    android:angle="270" 
/> 
<!--gradient 产生颜色渐变 android:angle 从哪个角度开始变 只有90的整数倍可以 -->
<solid android:color="#ff4100ff"/> 
<!--solid表示图形是实心的,填充里面,#ff4100ff为填充颜色-->
<stroke 
    android:width="2dp"
    android:color="#ee31ff5e" 
    android:dashWidth="3dp" 
    android:dashGap="2dp" /> 
<!-- 描边 采用那样的方式将外形轮廓线画出来,width表示笔的粗细,dashWidth表示小横线的宽度,dashGap表示小横线之间的距离-->
<padding
    android:left="7dp"
    android:top="7dp"
    android:right="7dp" 
    android:bottom="7dp" /> 
<!--和CSS中的padding应该是一个道理-->
<corners android:radius="6dp" /> 
<!--corners表示是有半径为5像素的圆角-->
</shape>


当我们想让一个控件根据不同状态显示不同图片,可以直接在程序中控制,也可以在drawable目录建立XML文件达到相同的效果,例如:我们可以在drawable目录下新建文件button_back.xml
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item  android:state_pressed="false"android:drawable="@drawable/xxx1" />
    <item  android:state_pressed="true"  android:drawable="@drawable/xxx2" />
    <item  android:state_focused="true"  android:drawable="@drawable/xxx3" />
    <-- 这里还可以加N多效果和动作 只要你用的到 -->
    <item  android:drawable="@drawable/xxx4" />
</selector>


以上XML文件可以实现一个控件(假设为button),获取焦点,按下按钮,正常状态下显示不同图片的效果,只需要在定义控件是引用该文件名即可,例如:
<Button
     android:id="@+id/Button"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:background="@drawable/button_add_x">
</Button>
<!--android:background="@drawable/button_back"指向button_back.xml文件-->


但是当我们的条件不是系统已有的事件类型,例如根据ImageView根据一个变量var的值的不同显示不同的图片,应该怎么办呢?可以在程序中写如下代码
if (条件1){
      image.setBackground(R.id.xxx1);
}else if (条件2){
      image.setBackground(R.id.xxx2);
} ...


或者可以用另一个简便的方法实现相同的功能,在res/drawable下建立一个xml文件,内容如下
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:maxLevel="9" android:drawable="@drawable/battery_0" />
    <item android:maxLevel="39" android:drawable="@drawable/battery_1" />
    <item android:maxLevel="69" android:drawable="@drawable/battery_2" />
    <item android:maxLevel="89" android:drawable="@drawable/battery_3" />
    <item android:maxLevel="100" android:drawable="@drawable/battery_4" />
</level-list>

然后在layout中把imageview的src设置成已创建好的xml文件 ,程序中变换图片时,只需要使用 imageview.getDrawable().setLevel(50);Android会根据level的值自动选择对应的图片。手机显示剩余电量就是用这个方法来显示不同图片的。

三、菜单文件:在menu目录下,写代码时只需在onCreateOptionsMenu方法中用MenuInflater装载进去就OK了。格式如下
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/enabled_item"
        android:title="Enabled"
        android:icon="@drawable/stat_happy" />

    <item android:id="@+id/disabled_item"
        android:title="Disabled"
        android:enabled="false"
        android:icon="@drawable/stat_sad" />

    <item android:id="@+id/enabled_item_2"
        android:title="Enabled"
        android:icon="@drawable/stat_happy" />

    <item android:id="@+id/disabled_item_2"
        android:title="Disabled"
        android:enabled="false"
        android:icon="@drawable/stat_sad" />
</menu>


四、resource文件,在values目录下,之所以称之为resource文件,是因为values目录下xml文件都是以resource作为根节点

1.strings.xml  定义字符串的文件,格式如下:
<resources>
    <string name="hello">Hello World!</string>
    <string name="app_name">我的应用程序</string>
</resources>


2.colors.xml  定义颜色的文件,格式如下:
<resources>
    <!--定义图片颜色-->
    <drawable name="screen_background_black">#ff000000</drawable>
    <drawable name="translucent_background">#e0000000</drawable>
    <drawable name="transparent_background">#00000000</drawable>
    <!--定义文字颜色-->
    <color name="solid_red">#f00</color>
    <color name="solid_blue">#0000ff</color>
    <color name="solid_green">#f0f0</color>
    <color name="solid_yellow">#ffffff00</color>
</resources>


3.arrays.xml  定义数组的文件,格式如下:
<resources>
    <string-array name="planets">
        <item>Mercury</item>
        <item>Venus</item>
        <item>Earth</item>
        <item>Mars</item>
        <item>Jupiter</item>
        <item>Saturn</item>
        <item>Uranus</item>
        <item>Neptune</item>
        <item>Pluto</item>
    </string-array>

    <integer-array name="numbers">
        <item>100</item>
        <item>500</item>
        <item>800</item> 
    </integer-array>
</resources>


4.styles.xml  定义样式的文件,分为两种用途:

Style:以一个单位的方式用在布局XML单个元素(控件)当中。 例如:我们可以为TextView定义一种样式风格,包含文本的字号大小和颜色,然后将其用在TextView特定的实例。

Theme:以一个单位的方式用在应用中所有的Activity当中或者应用中的某个Activity当中。 比如,我们可以定义一个Theme,它为window frame和panel 的前景和背景定义了一组颜色,并为菜单定义可文字的大小和颜色属性,可以将这个Theme应用在你程序当中所有的Activity里。
<resources>
   <!--Theme,可以用来定义activity的主题-->
   <style name="Theme.Transparent">
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item>
        <item name="android:windowBackground">@drawable/transparent_background</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:colorForeground">#fff</item>
    </style>
    <!--Style,可以用来定义某个View元素,这里是ImageView的样式-->
    <style name="ImageView120dpi">
        <item name="android:src">@drawable/stylogo120dpi</item>
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">wrap_content</item>
    </style>
</resources>

个人认为,其实不管是Theme还是Style,其实只是应用的范围不同而已,区分的话应该是根据android:name="xxxx"的xxxx来区分吧,很明显是不同的。

5.dimen.xml  定义单位的文件,android中度量单位有以下几种:
  • px(象素): 屏幕实际的象素,常说的分辨率1024*768pixels,就是横向1024px, 纵向768px,不同设备显示效果相同。
  • in(英寸): 屏幕的物理尺寸, 每英寸等于2.54厘米。
  • mm(毫米): 屏幕的物理尺寸。
  • pt(点) : 屏幕的物理尺寸。1/72英寸。
  • dp/dip : 与密度无关的象素,一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dp = 1px。但dp和px的比例会随着屏幕密度的变化而改变,不同设备有不同的显示效果。
  • sp : 与刻度无关的象素,主要用于字体显示best for textsize,作为和文字相关大小单位。

<resources> 
    <dimen name="one_pixel">1px</dimen> 
    <dimen name="double_density">2dp</dimen> 
    <dimen name="sixteen_sp">16sp</dimen> 
</resources>


6.attrs.xml  定义属性的文件,主要用在自定义的组件中,具体使用方法会在后续的如何使用自定义组件中详细介绍,其格式如下:
<resources>     
    <declare-styleable name="MyView">     
        <attr name="textColor" format="color" />     
        <attr name="textSize" format="dimension" />     
    </declare-styleable>     
</resources>


五、动画文件 在anim目录下,动画资源分为两种

1.实现图片的translate、scale、rotate、alpha四种变化,还可以设置动画的播放特性,称为Tween动画。
<set xmlns:android="http://schemas.android.com/apk/res/android">               
    <translate android:interpolator="@android:anim/accelerate_interpolator"
         android:fromXDelta="0" android:toXDelta="200" android:fromYDelta="0"
         android:toYDelta="180" android:duration="2000" />
    <scale android:interpolator="@android:anim/accelerate_interpolator"
         android:fromXScale="1.0" android:toXScale="2.0" android:fromYScale="1.0"
         android:toYScale="2.0" android:pivotX="150%" android:pivotY="150%"
         android:duration="2000" />
    <alpha android:fromAlpha="1.0" android:toAlpha="1.0"
         android:duration="@android:integer/config_mediumAnimTime" />
    <rotate ....各个属性></rotate>
    <Interpolator >可以使用其子类和属性定义动画的运行方式,先快后慢,先慢后快等</Interpolator>
</set>


2.帧动画,逐帧播放设置的资源,称为Frame动画。
<animation-list xmlns:android=”http://schemas.android.com/apk/res/android” 
android:oneshot=”true”> 
    <item android:drawable=”@drawable/rocket_thrust1″ android:duration=”200″ /> 
    <item android:drawable=”@drawable/rocket_thrust2″ android:duration=”200″ /> 
    <item android:drawable=”@drawable/rocket_thrust3″ android:duration=”200″ /> 
</animation-list>


六、raw目录下的文件,是直接复制到设备中的任意文件。它们无需编译,添加到你的应用程序编译产生的压缩文件中。一般为应用要用到的音频或视频文件等等

要使用这些资源,可以调用Resources.openRawResource(),参数是资源的ID,即R.raw.somefilename。

七、xml目录下的文件,是程序中需要使用的普通xml文件。在运行时可以通过调用Resources.getXML()读取。

八、assets目录下的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件。

  • 先在Activity里面调用getAssets()来获取AssetManager引用。
  • 再用AssetManager的open(String fileName, int accessMode)方法则指定读取的文件以及访问模式就能得到输入流InputStream。
  • 然后就是用已经open file 的inputStream读取文件,读取完成后记得inputStream.close()。
  • 调用AssetManager.close()关闭AssetManager。


总结:其实android中定义如此多的XML配置文件,在我看来就是为了达到显示层和数据层的分离,提高了可维护性,也是我们的程序代码变得简洁。
分享到:
评论
1 楼 游子月 2013-10-10  
 

相关推荐

    Android xml布局文件生成工具

    "新版Android开发教程+笔记十一--可视化UI设计DroidDraw.pdf"可能是关于如何使用DroidDraw进行UI设计的教程文档,涵盖了使用DroidDraw的基本操作和技巧,包括如何创建活动(Activity)、设置控件属性、组织布局结构...

    Android中使用xml文件定义颜色资源.pdf

    总结来说,Android中使用XML文件定义颜色资源是一种规范且灵活的方法,它能帮助开发者更好地组织和重用颜色信息。通过在`colors.xml`中定义颜色,然后在布局文件、`drawable`资源或代码中引用,可以提高代码的可读性...

    android读写xml文件

    android中读写xml文件简单demo,可以通过此代码来简单的读取xml配置文件

    android下解析xml文件的demo

    DOM解析器将整个XML文件加载到内存中,形成一个树形结构,可以方便地遍历和修改XML文档的任何部分。然而,由于它需要一次性加载整个文件,对于大文件来说可能会消耗大量内存。 在"ReadXMLDemo"中,使用DOM解析的...

    android 解析XML文件 生成XML文件

    在Android开发中,XML文件广泛用于存储数据、配置文件以及应用程序间的数据交换。本文将深入探讨如何使用SAX、DOM和Pull解析器解析XML文件,以及如何生成XML文件。我们将同时展示Java和Kotlin两种语言的实现方法。 ...

    android xml中include标签的使用

    通过将公共的布局元素提取成单独的XML文件,然后在需要的地方用`&lt;include /&gt;`引用,可以显著提高代码的可维护性和可读性。 ### 2. `&lt;include /&gt;`的基本用法 ```xml layout="@layout/layout_to_include" android...

    android xml文件操作

    在Android开发中,XML文件操作是一项基础且重要的技能,它涉及到应用程序的数据存储、配置设置以及UI布局设计。本文将深入探讨Android中XML文件的读写、TXT文件操作、MD5加密以及如何利用百度地图API计算两点之间的...

    android 读取Excel文件转成xml文件

    在Android平台上,有时候我们需要处理Excel数据,例如读取其中的内容并转换为XML文件,以便更好地在应用程序中使用或与其他系统交换数据。这个项目提供了一种方法来实现这一目标,利用了jxl.jar库来处理Excel文件,...

    android xml文件解码工具

    在Android开发过程中,XML文件...通过以上知识点,我们可以理解Android XML文件解码工具的核心功能和使用场景。在实际开发中,熟练运用这些工具可以极大地提高我们的工作效率,尤其是在处理复杂或者加密的XML文件时。

    android XML文件详解

    在Android开发中,XML文件主要用于定义应用程序的用户界面(UI)。本文将详细介绍各种Layout中常用的一些重要属性,并将其分为三类进行阐述:定位与对齐、间距与填充、文本与图像处理。 #### 一、定位与对齐 1. **...

    android xml pull解析示例

    XML(eXtensible Markup Language)是一种用于标记...通过以上内容,我们可以了解XML Pull解析的基本概念、工作原理以及如何在Android中使用它来解析XML文档。在实际开发中,熟练掌握这一技术对于处理XML数据至关重要。

    android使用xml实现一些常用的背景图

    4. **XML布局**: 在Android中,XML布局文件负责定义UI组件的结构和它们之间的关系。这包括TextView、EditText、Button等元素。通过使用属性,我们可以为这些组件设置Shape、Selector或Layer-List作为背景。例如,将...

    androidXML.pdf

    Android支持使用XML文件来进行轻量级的数据存储。例如,可以通过`SharedPreferences`来保存XML格式的数据。此外,还可以利用`ContentResolver`和`ContentProvider`机制来实现更为复杂的数据共享。 ##### 3. 配置...

    解析xml文件 android

    本篇将详细介绍如何在Eclipse中解析XML文件,以及相关的Android XML解析技术。 首先,Android SDK提供了两种主要的XML解析方法:DOM(Document Object Model)和SAX(Simple API for XML)。DOM解析器将整个XML文件...

    android使用pull 解析xml文件源码

    pull解析xml文件,和sax和dom一样 都可以脱离android单独使用,pull和sax的原理一样,不一样的地方是pull读取xml文件后调用方法返回的是数字, 读取到xml的声明返回数字0 START_DOCUMENT; 读取到xml的结束返回数字1 ...

    android XML文件解析和序列化 demo

    在"android XML文件解析和序列化 demo"中,可能演示了如何创建自定义对象,使用Pull解析器读取XML文件,将数据填充到对象列表,然后使用类似Gson或自定义的方法将对象列表序列化回XML文件。 **代码示例** ```java ...

    Android XML 解析 写入

    DOM解析器一次性加载整个XML文档到内存中,适合小型XML文件。而PULL解析器则是在需要时按需读取XML数据,适合处理大型或流式XML文档,更节省内存。 ### 2. PULL解析方式 PULL解析器遵循事件驱动模型,它不会一次性...

    android中apk包中的xml文件解密

    本篇文章将详细介绍如何在Android中对APK包中的XML文件进行解密,以及这一过程涉及的相关技术。 首先,我们需要理解APK的结构。APK本质上是一个ZIP文件,包含以下关键部分: 1. **AndroidManifest.xml**:这是应用...

    android xml文件解析 SAX

    在Android开发中,XML文件广泛用于存储数据和配置信息,如布局、字符串资源、颜色等。解析XML文件是Android开发者必须掌握的一项技能。本篇将详细介绍Android中的SAX(Simple API for XML)解析方式。 SAX是一种...

Global site tag (gtag.js) - Google Analytics