Menus

Saturday 2 July 2016

String Resources


String Resources


A string resource provides text strings for your application with optional text styling and formatting. There are three types of resources that can provide your application with strings
String
XML resource that provides a single string.
String Array
XML resource that provides an array of strings.
Quantity Strings (Plurals)
XML resource that carries different strings for pluralization.
All strings are capable of applying some styling markup and formatting arguments. For information about styling and formatting strings, see the section about Formatting and Styling.

String


A single string that can be referenced from the application or from other resource files (such as an XML layout).
FILE LOCATION:
res/values/filename.xml
The filename is arbitrary. The <string> element's name will be used as the resource ID.
COMPILED RESOURCE DATATYPE:
Resource pointer to a String.
RESOURCE REFERENCE:
In Java: R.string.string_name
In XML:@string/string_name
SYNTAX:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="string_name">text_string</string>
</resources>
ELEMENTS:
<resources>
Required. This must be the root node.
No attributes.
<string>
A string, which can include styling tags. Beware that you must escape apostrophes and quotation marks. For more information about how to properly style and format your strings see Formatting and Styling, below.
attributes:
name
String. A name for the string. This name will be used as the resource ID.
EXAMPLE:
XML file saved at res/values/strings.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="logiclab">LogicLab Solutions</string>
</resources>
This layout XML applies a string to a View:
<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/logiclab" />
This application code retrieves a string:
String string = getString(R.string.logiclab);

String Array


An array of strings that can be referenced from the application.

FILE LOCATION:
res/values/filename.xml
The filename is arbitrary. The <string-array> element's name will be used as the resource ID.
COMPILED RESOURCE DATATYPE:
Resource pointer to an array of Strings.
RESOURCE REFERENCE:
In Java: R.array.string_array_name
SYNTAX:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="string_array_name">
        <item>text_string</item>
    </string-array>
</resources>
ELEMENTS:
<resources>
Required. This must be the root node.
No attributes.
<string-array>
Defines an array of strings. Contains one or more <item> elements.
attributes:
name
String. A name for the array. This name will be used as the resource ID to reference the array.
<item>
A string, which can include styling tags. The value can be a reference to another string resource. Must be a child of a <string-array>element. Beware that you must escape apostrophes and quotation marks.
No attributes.
EXAMPLE:
XML file saved at res/values/strings.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="vehicle_array">
        <item>Bike</item>
        <item>Car</item>
        <item>Jeep</item>
        <item>Bus</item>
    </string-array>
</resources>
This application code retrieves a string array:
Resources res = getResources();
String[] planets = res.getStringArray(R.array.vehicle_array);

Quantity Strings (Plurals)


Android supports Plurals. Plurals are XML based resources which allow to handle different quantities. This way you can select the right text based on the quantity. In your XML file you specify values for the quantities “zero”, “one”, “two”, “many”, “few”, “many”, “other” and in your code you use the method getQuantityString() to get the correct value. You can also format strings. If now Strings are formated then you pass in the plural resources and the number. If Objects should be used for formating you pass them as additional parameters.

FILE LOCATION:


res/values/filename.xml
The filename is arbitrary. The <plurals> element's name will be used as the resource ID.
RESOURCE REFERENCE:
In Java: R.plurals.plural_name
SYNTAX:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <plurals
        name="plural_name">
        <item
            quantity=["zero" | "one" | "two" | "few" | "many" | "other"]
            >text_string</item>
    </plurals>
</resources>
ELEMENTS:
<resources>
Required. This must be the root node.
No attributes.
<plurals>
A collection of strings, of which, one string is provided depending on the amount of something. Contains one or more <item> elements.
attributes:
name
String. A name for the pair of strings. This name will be used as the resource ID.
<item>
A plural or singular string. The value can be a reference to another string resource. Must be a child of a <plurals> element. Beware that you must escape apostrophes and quotation marks.
attributes:
quantity
Keyword. A value indicating when this string should be used. Valid values, with non-exhaustive examples in parentheses:
ValueDescription
zeroWhen the language requires special treatment of the number 0 (as in Arabic).
oneWhen the language requires special treatment of numbers like one (as with the number 1 in English and most other languages; in Russian, any number ending in 1 but not ending in 11 is in this class).
twoWhen the language requires special treatment of numbers like two (as with 2 in Welsh, or 102 in Slovenian).
fewWhen the language requires special treatment of "small" numbers (as with 2, 3, and 4 in Czech; or numbers ending 2, 3, or 4 but not 12, 13, or 14 in Polish).
manyWhen the language requires special treatment of "large" numbers (as with numbers ending 11-99 in Maltese).
otherWhen the language does not require special treatment of the given quantity (as with all numbers in Chinese, or 42 in English).




EXAMPLE:


XML file saved at res/values/strings.xml:

we are going to use “Plurals” tag rather than “String” tag


<resources>
<plurals name="numberOfBooks">
<item quantity="one">%d book!</item>
<item quantity= "other">%d books!</item>
</plurals>
</resources>


This application code

int booksCount= 30;
String result = getResources().getQuantityString(R.plurals.numberOfBooks, booksCount,booksCount);
textView.setText(result);


result should be “30 books!”




Formatting and Styling



Escaping apostrophes and quotes



<string name="good_example">This is a \"good string\".</string>
<string name="good_example1">This\'ll work</string>

Formatting strings

Example

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>

The format string has two arguments: %1$s is a string and %2$d is a decimal number.

Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);


Styling with HTML markup


<resources>
    <string name="welcome">Welcome to <b>Android</b>!</string>
</resources>

Supported HTML elements include:
  • <b> for bold text.
  • <i> for italic text.
  • <u> for underline text.

No comments:

Post a Comment