icon
icon

Androidアプリ開発のFrameLayoutの使い方【初心者向け】

Androidアプリ開発におけるレイアウトのうち【FrameLayout】の使い方について初心者向けに解説した記事です。パーツをひとつだけ配置して使用するレイアウトです。また、複数のパーツを配置した場合は重なって表示されます。

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

Androidアプリ開発では、アプリの画面を簡単に作成できるレイアウトが数多く用意されています。

今回はそのなかの1つである、FrameLayout(フレームレイアウト)を追加する方法と基本的な使い方をご紹介します。

 

本記事はTechAcademyのAndroidアプリ開発オンラインブートキャンプの内容をもとに解説しています。

 

大石ゆかり

田島メンター!!FrameLayoutっていうレイアウトがあるんですけど、これって何に使うんですか〜?

田島悠介

FrameLayoutはビューを重ねて表示したい時に使うんだ。ちょっと試しにやってみようか。

 

FrameLayoutとは

FrameLayoutとは、パーツをひとつだけ配置して使用するレイアウトです。位置の指定はできず、FrameLayoutに配置したパーツは左上に表示されます。

また、FrameLayoutに複数のパーツを配置した場合、パーツが重なって表示されます。

 

 

FrameLayoutを配置する

FrameLayoutはレイアウトエディタのパレットの「レイアウト」から配置できます。

パレット内のFrameLayoutを、プレビュー画面までドラッグしましょう。

 

 

[PR] Androidアプリの開発で挫折しない学習方法を動画で公開中

FrameLayoutにパーツを配置する

FrameLayoutにパーツを配置するには、レイアウトエディタのパレットから配置したいパーツを選択し、プレビュー画面へドラッグします。

 

配置したパーツの位置を指定することはできず、画面の左上に表示されます。

 

さらにもうひとつパーツを配置してみましょう。すると先ほど配置したパーツの上に重なって表示されます。

 

 

FrameLayoutの応用

最後に応用として、FrameLayoutを利用して次のような画面のレイアウトを作る例を紹介します。

ボタンを押すことで表示される内容が変わる画面です。

 

レイアウトは、次のようになっています。

最初にLinearLayout(Vertical)(黄色枠)を配置します。

次に、LinearLayout(Hrizontal)(青枠)を配置し、画面を切り替えるためのボタンを配置します。

さらに、FrameLayout(赤枠)を配置し、その中に表示する画面を作成するために、レイアウトを3つ重ねた状態で配置しています。

 

なお、表示する画面の切り替えは、FrameLayoutの中に作成したレイアウトを、javaで制御しています。

レイアウトのソースは以下のようになります。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="画面1" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="画面2" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="画面3" />
</LinearLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">

<LinearLayout
android:id="@+id/layout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:visibility="invisible">

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="40dp"
android:text="画面1"
android:textSize="40dp" />
</LinearLayout>
<LinearLayout
android:id="@+id/layout2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:visibility="invisible">
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="40dp"
android:layout_gravity="center"
android:layout_marginTop="40dp"
android:text="画面2" />
</LinearLayout>
<LinearLayout
android:id="@+id/layout3"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:visibility="invisible">
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="40dp"
android:layout_gravity="center"
android:layout_marginTop="40dp"
android:text="画面3" />
</LinearLayout>

</FrameLayout>
</LinearLayout>

MainActivityには以下のように記述しました。

public class MainActivity extends AppCompatActivity {

private LinearLayout mLayout1;
private LinearLayout mLayout2;
private LinearLayout mLayout3;

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

mLayout1 = (LinearLayout)findViewById(R.id.layout1);
mLayout2 = (LinearLayout)findViewById(R.id.layout2);
mLayout3 = (LinearLayout)findViewById(R.id.layout3);

findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mLayout1.setVisibility(View.VISIBLE);
mLayout2.setVisibility(View.INVISIBLE);
mLayout3.setVisibility(View.INVISIBLE);
}
});
findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mLayout2.setVisibility(View.VISIBLE);
mLayout1.setVisibility(View.INVISIBLE);
mLayout3.setVisibility(View.INVISIBLE);
}
});
findViewById(R.id.button3).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mLayout3.setVisibility(View.VISIBLE);
mLayout2.setVisibility(View.INVISIBLE);
mLayout1.setVisibility(View.INVISIBLE);
}
});
}
}

今回の記事は以上です。

さらに他のレイアウトを試したい場合はGridLayoutの使い方も合わせてご覧ください。

 

大石ゆかり

なるほど、こうやって使うんですね!

田島悠介

使うのが少し難しいLayoutだけど、使い方によっては画面内で画面を切り替えるようなこともできるから、覚えておくと良いね。

大石ゆかり

はい!

 

[お知らせ]TechAcademyでは初心者でもオリジナルアプリが作れるAndroidアプリ開発講座(オンラインブートキャンプ)を開催しています。自分でアプリを公開してみたい場合はご参加ください。

初心者・未経験でもできる。まずはテックアカデミーに相談しよう

プログラミングを独学で学習していて、このように感じた経験はないでしょうか?

  • ・調べてもほしい情報が見つからない
  • ・独学のスキルが実際の業務で通用するのか不安
  • ・目標への学習プランがわからず、迷子になりそう

テックアカデミーでは、このような 学習に不安を抱えている方へ、マンツーマンで相談できる機会を無料で提供 しています。
30分間、オンラインでどんなことでも質問し放題です。

「受けてよかった」と感じていただけるよう カウンセラーやエンジニア・デザイナー があなたの相談に真摯に向き合います。

「自分に合っているか診断してほしい」
「漠然としているが話を聞いてみたい」

こんなささいな悩みでも大丈夫です。

無理な勧誘は一切ありません ので、まずはお気軽にご参加ください。
※体験用のカリキュラムも無料で配布いたします。(1週間限定)

今なら参加者限定の割引特典付き! 無料相談を予約する