Android Studio 1.4からアプリのレイアウトを決定するactivity_main.xml以外にcontent_main.xmlが追加されております。
Table of Contents
1 content_main.xmlとは
Android Studio 1.4以降に追加されたレイアウトを記載するxmlファイルです。
Android Studio 1.4より前はレイアウトを記載するxmlファイルはactivity_my.xmlのみでした。
Androidの開発ページにactivity_my.xmlとcontent_my.xmlで説明されています。
myとなっているのはアプリケーション毎に名前を変更するものだからです。
デフォルトではactivity_main.xmlとcontent_main.xmlとなっています。
activity_my.xml(activity_main.xml)はapp barやfloating action button等のアプリケーションの外観を担う新規のコンポーネントを含みます。
これらの新規のコンポーネントはAndroid 4.0で新規に追加されたActionBarみたいなものです。
また、activity_my.xmlからcontent_my.xmlをインクルードしています。
<include layout="@layout/content_main"/>
content_my.xml(content_main.xml)はTextView等のコンポーネントを含みます。content_my.xmlは旧来のactivity_my.xmlと同様のものです。
以下の画像はAndroid Studio 1.4とAndroid Studio 1.4より前の場合のBlank Activityのレイアウトです。
よって、content_main.xmlが新規に追加されたというよりは、app barやfloating action button等の新規のコンポーネントが追加され、他のxmlファイルをインクルードできるようになったと言えます。
TextView等のコンポーネントをactivity_my.xmlに含めても動作します。
以前のAndroid開発で利用していたactivity_my.xmlの内容をそのまましつつcontent_my.xmlリネームしてインクルードすれば流用が可能です。
app barやfloating button等の新規コンポーネントを利用しないならば、そのままの名前で使っても問題ありません。
Empty Activityというテンプレートで新規にプロジェクトを作成した場合は新規コンポーネントは使われず、Android Studio 1.4より前のactivity_my.xmlと同様になります。
Android 4.0で追加されたActionBarで互換性維持に若干難が生じたので、今後の互換性維持の為にも複数のxmlファイルに分けて役割分担をするようにしているのでしょう。
2 content_main.xmlのコンポーネントをfindViewByIdで参照
以前と同様にidを割り当てることで、findViewByIdメソッドからコンポーネントを参照できます。別ファイルに分かれていることを意識する必要はありません。
ただしデフォルトではidは設定されておりません。Propertiesからidの値を設定するか、コンポーネントをWクリックすることでidを設定することができます。
なお、javaファイルからはインクルードしている側のxmlファイルをsetContentViewに渡します。
findViewByIdでTextViewにアクセスし、文字列を変更します。
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); TextView textView = (TextView) findViewById(R.id.hello); textView.setText("Text is changed in MainActivity.java"); }
実行すると以下のようになります。