Supporting Different Languages
values
directories inside
res/
that include a hyphen and the ISO country code at the end of the directory name.
MyProject/ res/ values/ strings.xml values-es/ strings.xml values-fr/ strings.xml
English (default locale), /values/strings.xml
:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="title">My Application</string> <string name="hello_world">Hello World!</string> </resources>
Spanish, /values-es/strings.xml
:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="title">Mi Aplicación</string> <string name="hello_world">Hola Mundo!</string> </resources>
French, /values-fr/strings.xml
:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="title">Mon Application</string> <string name="hello_world">Bonjour le monde !</string> </resources>
// Get a string resource from your app'sResources
String hello =getResources()
.getString(R.string.hello_world); // Or supply a string resource to a method that requires a string TextView textView = new TextView(this); textView.setText(R.string.hello_world);
Supporting Different Screens
- There are four generalized sizes: small, normal, large, xlarge
- And four generalized densities: low (ldpi), medium (mdpi), high (hdpi), extra high (xhdpi)
MyProject/ res/ layout/ main.xml layout-large/ main.xml
he file names must be exactly the same, but their contents are different in order to provide an optimized UI for the corresponding screen size.
Simply reference the layout file in your app as usual:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }
The system loads the layout file from the appropriate layout directory based on screen size of the device on which your app is running
MyProject/ res/ layout/ main.xml layout-land/ main.xml
By default, the layout/main.xml
file is used for portrait orientation.
If you want to provide a special layout for landscape, including while on large screens, then you need to use both the large
and land
qualifier:
MyProject/ res/ layout/ # default (portrait) main.xml layout-land/ # landscape main.xml layout-large/ # large (portrait) main.xml layout-large-land/ # large landscape main.xml
To generate these images, you should start with your raw resource in vector format and generate the images for each density using the following size scale:
- xhdpi: 2.0
- hdpi: 1.5
- mdpi: 1.0 (baseline)
- ldpi: 0.75
MyProject/ res/ drawable-xhdpi/ awesomeimage.png drawable-hdpi/ awesomeimage.png drawable-mdpi/ awesomeimage.png drawable-ldpi/ awesomeimage.png
Any time you reference @drawable/awesomeimage
, the system selects the appropriate bitmap based on the screen's density.
Supporting Different Platform Versions
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... > <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" /> ... </manifest>you should set the
targetSdkVersion
value to match the latest Android version available.
Build
constants class. Use these codes within your app to build conditions that ensure the code that depends on higher API levels is executed only when those APIs are available on the system.private void setUpActionBar() { // Make sure we're running on Honeycomb or higher to use ActionBar APIs if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { ActionBar actionBar = getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); } }When parsing XML resources, Android ignores XML attributes that aren’t supported by the current device.
To make your activity look like a dialog box:
<activity android:theme="@android:style/Theme.Dialog">
To make your activity have a transparent background:
<activity android:theme="@android:style/Theme.Translucent">
To apply your own custom theme defined in /res/values/styles.xml
:
<activity android:theme="@style/CustomTheme">
To apply a theme to your entire app (all activities), add the android:theme
attribute to the <application>
element:
<application android:theme="@style/CustomTheme">