zoukankan      html  css  js  c++  java
  • Android学习二:Resources

    Resources在Android体系中非常重要,常用的Resources有strings,colors,bitmaps和layouts等,你可以修改这些文件的值而不用去重新编译程序。在android中有非常多的resource类型,在这里我们主要讨论学习常用的类型。

    • String Resources

         android的strings文件放在res/values目录下面,你可以定义一个或多个XML文件来存放strings值,文件名可以随意取,不过经常情况下你看到的文件名是

    strings.xml。

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <string name="hello">hello</string>
    <string name="app_name">hello appname</string>
    </resources>

    在程序中使用时:

    getString(R.string.app_name);
    getString(R.string.hello);

    还可以在xml文件中这样用:android:text="@string/app_name"

    • Layout Resources

        在android中窗口的布局通常都是通过xml文件来完成的,文件一般放在res/layout目录下面。

    public class HelloWorldActivity extends Activity
    {
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    TextView tv = (TextView)this.findViewById(R.id.text1);
    tv.setText("Try this text instead");
    }
    ...
    }

    代码中红色部分说明设置此Activity的view的布局文件是layout下的main.xml文件。

    比如main.xml文件代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <TextView android:id="@+id/text1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />
    <Button android:id="@+id/b1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />
    </LinearLayout>

    • 引用Resources

    Resource的引用语法结构是:@[package:]type/name。常用的

    • R.string
    • R.id
    • R.drawable
    • R.layout
    • R.attr
    • R.plural
    • R.array

    在res目录下有一些重要的文件类型目录我们需要知道:

    • anim:  编译动画文件。
    • drawable:  Bitmaps.
    • layout: 定义UI和view。
    • values:Arrays,strings,colors,dimensions和styles。
    • xml: xml文件。
    • raw:Noncompiles raw files。
    • String Arrays的用法
    <resources ....>
    ......Other resources
    <string-array name="test_array">
    <item>one</item>
    <item>two</item>
    <item>three</item>
    </string-array>
    ......Other resources
    </resources>

    在代码中引用时:

    //Get access to Resources object from an Activity
    Resources res = your-activity.getResources();
    String strings[] = res.getStringArray(R.array.test_array);

    • Plurals
    <resources...>
    <plurals name="eggs_in_a_nest_text">
    <item quantity="one">There is 1 egg</item>
    <item quantity="other">There are %d eggs</item>
    </plurals>
    </resources>
    Resources res = your-activity.getResources();
    String s1 = res.getQuantityString(R.plurals.eggs_in_a_nest_text, 0,0);
    String s2 = res.getQuantityString(R.plurals.eggs_in_a_nest_text, 1,1);
    String s3 = res.getQuantityString(R.plurals.eggs_in_a_nest_text, 2,2);
    String s4 = res.getQuantityString(R.plurals.eggs_in_a_nest_text, 10,10);
    • Colors 资源

    xml文件中定义colors:

    <resources>
    <color name="red">#f00</color>
    <color name="blue">#0000ff</color>
    <color name="green">#f0f0</color>
    <color name="main_back_ground_color">#ffffff00</color>
    </resources>

    在java代码中引用:

    int mainBackGroundColor
    = activity.getResources.getColor(R.color.main_back_ground_color);

    还可以在view布局文件中使用:

    <TextView android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/red"
    android:text="Sample Text to Show Red Color"/>
    • Dimensions(尺寸) 资源
    <resources>
    <dimen name="mysize_in_pixels">1px</dimen>
    <dimen name="mysize_in_dp">5dp</dimen>
    <dimen name="medium_size">100sp</dimen>
    </resources>
    float dimen = activity.getResources().getDimension(R.dimen.mysize_in_pixels);
    <TextView android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textSize="@dimen/medium_size"/>
    • Image 资源
    <Button
    android:id="@+id/button1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Dial"
    android:background="@drawable/sample_image"
    />
    //Call getDrawable to get the image
    BitmapDrawable d = activity.getResources().getDrawable(R.drawable.sample_image);
    //You can use the drawable then to set the background
    button.setBackgroundDrawable(d);
    //or you can set the background directly from the Resource Id
    button.setBackgroundResource(R.drawable.sample_image);
    • 读取XML文件

    读取res/xml/test.xml

    <rootelem1>
    <subelem1>
    Hello World from an xml sub element
    </subelem1>
    </rootelem1>
    private String getEventsFromAnXMLFile(Activity activity)
    throws XmlPullParserException, IOException
    {
    StringBuffer sb = new StringBuffer();
    Resources res = activity.getResources();
    XmlResourceParser xpp = res.getXml(R.xml.test);
    xpp.next();
    int eventType = xpp.getEventType();
    while (eventType != XmlPullParser.END_DOCUMENT)
    {
    if(eventType == XmlPullParser.START_DOCUMENT)
    {
    sb.append("******Start document");
    }
    else if(eventType == XmlPullParser.START_TAG)
    {
    sb.append("
    Start tag "+xpp.getName());
    }
    else if(eventType == XmlPullParser.END_TAG)
    {
    sb.append("
    End tag "+xpp.getName());
    }
    else if(eventType == XmlPullParser.TEXT)
    {
    sb.append("
    Text "+xpp.getText());
    }
    eventType = xpp.next();
    }//eof-while
    sb.append("
    ******End document");
    return sb.toString();
    }//eof-function
    • Raw Resources

    读取res/raw/test.txt文件

    String getStringFromRawFile(Activity activity)
    throws IOException
    {
    Resources r = activity.getResources();
    InputStream is = r.openRawResource(R.raw.test);
    String myText = convertStreamToString(is);
    is.close();
    return myText;
    }
    String convertStreamToString(InputStream is)
    throws IOException
    {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    int i = is.read();
    while (i != -1)
    {
    baos.write(i);
    i = is.read();
    }
    return baos.toString();
    }
    • Assets

    Assets目录与res目录同级,放入assets目录下的文件不会被编译无法通过R.java访问,需要通过AssetManager对象来访问。

    //Note: Exceptions are not shown in the code
    String getStringFromAssetFile(Activity activity)
    {AssetManager am = activity.getAssets();
    InputStream is = am.open("test.txt");
    String s = convertStreamToString(is);
    is.close();
    return s;
    }

    好了,我们重新看下Resources的文件结构:

    /res/values/strings.xml
    /colors.xml
    /dimens.xml
    /attrs.xml
    /styles.xml
    /drawable/*.png
    /*.jpg
    /*.gif
    /*.9.png
    /anim/*.xml
    /layout/*.xml
    /raw/*.*
    /xml/*.xml
    /assets/*.*/*.*

  • 相关阅读:
    去除图片水印
    CALayer
    UIKit Animation
    CoreAnimation
    3DTouch
    键盘事件
    weChat聊天发送图片带有小尖角的实现
    webView 和 js 交互 之 屏蔽 样式
    iOS socket编程
    tableView尾部多处一部分空白高度
  • 原文地址:https://www.cnblogs.com/zjmsky/p/4679168.html
Copyright © 2011-2022 走看看