151
votes

Anybody could explain the meaning of "android.R.id.content" ?

How is it being used ?

http://developer.android.com does not have any explanation.

public static final int content
Since: API Level 1

Constant Value: 16908290 (0x01020002)

4
android.R.id.content gives you the root element of a view, without having to know its actual name/type/ID. Check out stackoverflow.com/questions/4486034/…Philipp Reichart
This is useful in fragment transactions like: mFragmentTransaction.add(android.R.id.content, myFragment);IgorGanapolsky
@IgorGanapolsky An example app performs this kind of transaction in a conditional:if(fragmentManager.findFragmentById(android.R.id.content)==null) {fragmentManager.beginTransaction(android.R.id.content, list).add().commit();} Can you tell which View's root element is this?Solace
@Zarah Are you sure your syntax is correct here and compilable?IgorGanapolsky
What is the class of the layout associated with android.R.id.content ?Sushant

4 Answers

107
votes

As Philipp Reichart commented:

android.R.id.content gives you the root element of a view, without having to know its actual name/type/ID. Check out http://stackoverflow.com/questions/4486034/android-how-to-get-root-view-from-current-activity

25
votes

The android.R.id.content ID value indicates the ViewGroup of the entire content area of an Activity.

It can be used with Fragment:

public class MyActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                .add(android.R.id.content, MyFragment.newInstance())
                .commit();
        }
    }

    ...

}

The code above will insert the View created by Fragment into the ViewGroup identified by android.R.id.content.

10
votes

Google designers develop Android UX with specific or recommended design guidelines. The layout android.R.id.content defines a linearlayout with a few attributes Android believes are a good standard.

Thus loading a Fragment Manager's root view with android.R.id.content ensures these guidelines are implemented.

NOTE: This layout has set the attribute: android:addStatesFromChildren="true" to allow child fragments to overwrite attributes in this rootview.

As of version 19, android.R.id.content is defined in a file: auto_complete_list.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/content"
    android:orientation="vertical"
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"
    android:background="@android:drawable/edit_text"
    android:divider="@android:drawable/divider_horizontal_textfield"
    android:addStatesFromChildren="true">
0
votes

android.R.id.content is very useful for when you need a view, for example:

Show Snackbar:

Snackbar.make(activity.findViewById(android.R.id.content), MESSAGE, Snackbar.LENGTH_LONG).show();

Fragment transaction

 getSupportFragmentManager().beginTransaction()
                .add(android.R.id.content, FragmnetTest.newInstance())
                .commit();