🔖
[Android][kotlin]透過Fragmentのサンプル

期待通り下のFragmentを透過している
Abstract
- Androidで透過Fragmentの実装のサンプル
- その説明
概要
Fragmentを透過して表示させたいと思ってサンプルを作成してみた。
普段、Navigationコンポーネントを使って実装しているのだけど、これはFragmentのreplace()にしかからないため、Fragmentの重ねが不可能。
実はその部分でものすごいハマりました。という事でソースコードはgithubに公開しました。
使い方
上記githubからcloneなりzipダウンロードして、Android Studioで開くだけ。
実装のポイント
分かってしまえば簡単。
- Navigationコンポーネントは使わない。
- 呼び元Fragmentでは、parentFragmentManager.beginTransaction().add()を実行。
- 呼び先FragmentのonViewCreated()で、透過設定。
- 呼び先Fragmentのxmlにも、透過設定。
Navigationコンポーネントは使わない。
使ってたらFragment重ねができません。
呼び元Fragmentでは、parentFragmentManager.beginTransaction().add()を実行。
(replaceではない。)
FragmentA.kt
binding.btnNext.setOnClickListener {
parentFragmentManager.beginTransaction()
.setReorderingAllowed(true)
.add(R.id.fragment_container, FragmentB::class.java, null)
.addToBackStack(null)
.commit()
}
呼び先FragmentのonViewCreated()で、透過設定。
FragmentB.kt
view.setBackgroundColor("#80000000".toColorInt())
// 背景透過にしたい場合
// view.setBackgroundColor(android.graphics.Color.TRANSPARENT)
呼び先Fragmentのxmlにも、透過設定。
FragmentA.kt
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/fragmentB_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent" ←★★★ココ
tools:context=".FragmentB">
遷移元ボタンのsetOnClickListenerは、FragmentBが上に重なっても生きてて、イベント拾うことができるのがちょっとしたポイント。
無効化したい時は、遷移先Fragmentのtopレイアウトでイベントを下に流さない設定をしてあげれば無効化になる。
以上、透過Fragmentの説明でした。
お役に立ちますように。。。
Discussion