Android Studio 1.4のcontent_main.xmlについて

Android Studio 1.4からアプリのレイアウトを決定するactivity_main.xml以外にcontent_main.xmlが追加されております。

 

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のレイアウトです。

0001_BlankActivity.png

よって、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を設定することができます。

0002_id.png

なお、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");
}

実行すると以下のようになります。

0003_Run.png