ラベル FrameLayout の投稿を表示しています。 すべての投稿を表示
ラベル FrameLayout の投稿を表示しています。 すべての投稿を表示

2025年4月29日火曜日

Android いまさら聞けないFrameLayout

どうも。どっことです。今回はFrameLayoutについて解説します。

FrameLayout

FrameLayoutはAndroidViewで使われるViewGroupの一つです。利用頻度はあまり多くありませんが、一時期まではかなり重要な使い道がありました。今回はそんなFrameLayoutの使い方について解説します。

押さえておくポイント

FrameLayoutを使うにあたって押さえておくべきポイントを解説します。

  1. layout_gravity
  2. 使いどころ

layout_gravity

layout_gravityはViewをどこに配置するかを設定するものです。LinearLayoutにもこの設定項目はありますが、LinearLayoutorientationの設定値にも影響する一方、FrameLayoutではこれ一つで配置が完結します。

layout_gravityには以下を設定することができます。|(パイプ)で繋げることで複数設定することも可能です。

  • top
    • FrameLayoutに対して上寄せにViewを配置します。
  • bottom
    • FrameLayoutに対して下寄せにViewを配置します。
  • start
    • FrameLayoutに対して左寄せにViewを配置します。
  • end
    • FrameLayoutに対して右寄せにViewを配置します。
  • center_vertical
    • FrameLayoutの上下中央にViewを配置します。
  • center_horizontal
    • FrameLayoutの左右中央にViewを配置します。
  • center
    • FrameLayoutの中央にViewを配置します。

実装サンプルを載せます。topstartはViewが移動しないので省略します。

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

    <TextView
        android:text="center"
        android:textSize="8dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"/>
        
    <TextView
        android:text="center\nvertical"
        android:textSize="8dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"/>

    <TextView
        android:text="center\nhorizontal"
        android:textSize="8dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"/>

    <TextView
        android:text="end"
        android:textSize="8dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="end"/>

    <TextView
        android:text="bottom"
        android:textSize="8dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"/>

</FrameLayout>

このレイアウトのプレビューが以下になります。

使いどころ

前述した通り、FrameLayoutは使いどころが少ないViewGroupです。ただ古いアプリの場合、特にAndroidのバージョンが4.4まではLinearLayoutRelativeLayoutforegroundの設定がサポートされていませんでした。その時に唯一foregroundがサポートされていたViewGroupがFrameLayoutでした。Viewをタップした時にオーバーレイする形でViewの色を変えたい時はこのforegroundが唯一の解決方法ですので、そのような表示をするためにFrameLayoutが利用されていたというわけです。

まとめ

今回はFrameLayoutの使い方について解説しました。「いまさら聞けないFrameLayout」と名打ちましたが、押さえておくべきポイントは他のViewGroupより少ないので、いざ使うことになったとしても困ることは多くないでしょう。

参考

移行予定

どうも。どっことです。 タイトルの通りですが、諸事情により GitHubPage に移行予定です。 https://mkt120.github.io/ この備忘録に記載の内容を転記しつつ、今後はこちらのページを更新していく予定です。