官术网_书友最值得收藏!

Defining and inflating a layout

When using the Android Studio wizard to create a new project, it automatically creates the res/layout/activity_main.xml file (as shown in the following screenshot). It then inflates the XML file in the onCreate() callback with setContentView(R.layout.activity_main).

For this recipe, we will create two, slightly different layouts and switch between them with a button.

Getting ready

Create a new project in Android Studio and call it InflateLayout. Once the project is created, expand the res/layout folder so we can edit the activity_main.xml file.

How to do it...

  1. Edit the res/layout/activity_main.xml file so it includes a button as defined here:
    <Button
        android:id="@+id/buttonLeft"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Left Button"
        android:layout_centerVertical="true"
        android:layout_alignParentLeft="true"
        android:onClick="onClickLeft"/>
  2. Now make a copy of activity_main.xml and call it activity_main2.xml. Change the button so it matches the following:
    <Button
        android:id="@+id/buttonRight"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Right Button"
        android:layout_centerVertical="true"
        android:layout_alignParentRight="true"
        android:onClick="onClickRight"/>
  3. Open MainActivity.java and add the following two methods to handle the button clicks:
    public void onClickLeft(View view) {
        setContentView(R.layout.activity_main2);
    }
    
    public void onClickRight(View view) {
        setContentView(R.layout.activity_main);
    }
  4. Run this application on a device or emulator to see it in action.

How it works...

The key here is the call to setContentView(), which we have come across before in the autogenerated onCreate() code. Just pass a layout ID to setContentView() and it automatically inflates the layout.

This code is meant to make the concept easy to understand but would be overkill for simply changing the property of a Button (in this example, we could just change the alignment on the button click). Inflating the layout is usually needed once, in the onCreate() method, but there are times when you may want to manually inflate a layout, as we did here. (If you were manually handling orientation changes, it would be a good example.)

There's more...

As well as identifying a layout using a resource ID, as we did here, setContentView()can also take a View as an argument, for example:

findViewById(R.id.myView)
setContentView(myView);

See also

  • As mentioned previously, see the Fragment topic, in Chapter 5, Exploring Fragments, AppWidgets, and the System UI, for the alternative method to change the screen layout
主站蜘蛛池模板: 罗甸县| 环江| 织金县| 黑龙江省| 淮北市| 兴文县| 通城县| 泰兴市| 金秀| 扶余县| 霍城县| 甘德县| 丹棱县| 郎溪县| 苏尼特左旗| 霸州市| 贺州市| 临澧县| 松原市| 南靖县| 玛多县| 厦门市| 广昌县| 亚东县| 民权县| 北海市| 遵化市| 郑州市| 玉门市| 铁岭县| 武鸣县| 广汉市| 吉木萨尔县| 扬中市| 夏津县| 临颍县| 兴城市| 肃南| 花莲县| 喀什市| 陈巴尔虎旗|