1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Androidでレイアウトファイルをテンプレート的に使いたい

Last updated at Posted at 2016-10-11

極力避けて通りたいレイアウトファイル

めんどくさいよね。
できれば、書きたくないし、アプリって大体UI統一されてるよね、ってことで、xmlをテンプレート的に扱うための簡単なソリューションです。

Fragment使えよ・・・

そうですね、そうですね、よくわかりますよ。
でもActivityだけで完結させたいことってあるじゃないですか。
私にはあるんです・・・。
Fragmentあまり好きじゃない(ボソ・・・

本題

どうやって解決しようか悩みました。
xmlにテンプレート機能なんてないんですもの。
でも、基本的なレイアウトは統一したい・・・。
悩んだ結果、私は、親になるActivityを作ることにしました。

コードはこんな感じ

BaseActivityを作って、以下のメソッドを作っておきます。

    /**
     * テンプレートにレイアウトをはめ込む
     *
     * @param layoutID
     */
    protected void setContentViewByTemplate(int layoutID) {
        View contentView = getLayoutInflater().inflate(R.layout.template_main_layout, null);
        FrameLayout layoutContainer = (FrameLayout) contentView.findViewById(R.id.layout_container);
        // MainActivityのレイアウトを追加
        layoutContainer.addView(getLayoutInflater().inflate(layoutID, null));
        setContentView(contentView);

    }

説明

基本的には、Fragmentと同じ考え方だと思います。
親のレイアウトに、layout_containerっていうViewを作ってきます。これはLinearLayoutでもFrameLayoutでもなんでもいいです。
このcontainerに、Viewをaddしています。

使い方

そして、MainとなるActivityからはこんな風に使います。

public class MainActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentViewByTemplate(R.layout.activity_main);

以下略

説明

activity_mainは、アクションバーとかボトムナビとかを除いた、その画面だけのレイアウトです。
例えば、こんな感じ

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- HelloWorld -->
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="hello world!" />

</RelativeLayout>

こうしておくことで、もしそのActivityの画面Fragmentにしてよって言われた時、そのままFragmentのレイアウトとしても使えるので、結構便利です。

まとめ

こうしておくと、コードの切り分けもできます。
ActionBarやBottomNavigationなど共通する部分の処理は、BaseActivityに、その画面特有の処理はそのなんちゃらActivityにって感じで書けます。

エラーメッセージなんかのダイアログやプレグレスなんかも、BaseActivityに書いておくと便利です。
extendsしておけば、そのまま使えますからね。

まだ開発中って時なんかは、ActionbarとかBottomnaviとか変更が多発したりするんですよ・・・。
でも、こうしておけば、共通部分のレイアウトに変更があった時なんかも修正箇所が少なくて済んでいます。

以上、テンプレート的に扱いたい場合のソリューションでした。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?