Absolute Layout

An AbsoluteLayout puts views on the screen wherever you tell it to. It doesn't try to resize anything, and it doesn't try to line anything up; it just puts things where it's told. You might think that it would be an easy type of layout to use, since you don't have to second-guess how the layout manager is going to rearrange things on your screen, but in practice the use of AbsoluteLayout is a bad idea for almost all applications. You usually want your application to run on as many Android devices as possible, and the strength of the Android layout manager is that it will automatically adapt your screen layout from device to device. AbsoluteLayout bypasses most of the layout manager, and while your application may look perfect on the device you used for development, the odds are very good that it will look terrible on other Android devices.

That warning aside, let's take a look at an AbsoluteLayout XML file:

<?xml version="1.0" encoding="utf-8"?>

<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent"

android:layout_height="fill_parent" >

<TextView android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="Upper Left"

android:layout_x="0.0px"

android:layout_y="0.0px"

<TextView android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="Middle"

android:layout_x="140.0px"

android:layout_y="200.0px"

<TextView android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="Lower Right"

android:layout_x="240.0px"

android:layout_y="400.0px"

</AbsoluteLayout>

As with any dimension in a layout file, the positions can be expressed in pixels (px), device-independent pixels (dp), scaled pixels (sp), inches (in), or millimeters (mm), and

Q SED« 7:25 PM

AbsoluteLayout

Upper Left

Middle

Lower Right

Figure 11-15. AbsoluteLayout the dimension has to be a floating-point number. (For more about expressing sizes, see "Dimensions in Android" on page 51 in Chapter 4.)

Figure 11-15 shows the resulting screen layout. Obviously, the position (0, 0) is the upper-left corner of the display, and the View is properly flush with the corner. The lower-right corner on the emulator is supposed to be (320, 480), but the View appears to be a little shy of that in both dimensions.

Just to caution against the use of AbsoluteLayout again, we suggest you try changing the emulator skin to show the screen in landscape mode (enter emulator -skin HVGA-L from a command or terminal window before you run the application), and you can see in Figure 11-16 that the application no longer looks right.

0 0

Post a comment