Site icon C1CTech

Android BottomSheet Example in Kotlin

&NewLine;<p>This article is about BottomSheet&comma; types of BottomSheet&comma; and how to integrate a basic Bottom Sheet in our Android application&period;<&sol;p> &NewLine; &NewLine; &NewLine; &NewLine;<div class&equals;"wp-block-buttons is-content-justification-center is-layout-flex wp-block-buttons-is-layout-flex"> &NewLine;<div class&equals;"wp-block-button"><a class&equals;"wp-block-button&lowbar;&lowbar;link has-white-color has-text-color has-background" style&equals;"background-color&colon; &num;520599&semi;" href&equals;"https&colon;&sol;&sol;github&period;com&sol;arunk7839&sol;AndroidBottomSheetExp" target&equals;"&lowbar;blank" rel&equals;"noreferrer noopener"><strong>DOWNLOAD CODE<&sol;strong><&sol;a><&sol;div> &NewLine;<&sol;div> &NewLine;<p><amp-youtube layout&equals;"responsive" width&equals;"1200" height&equals;"675" data-videoid&equals;"c7xM94ZCaF4" title&equals;"Android BottomSheet Example in Kotlin"><a placeholder href&equals;"https&colon;&sol;&sol;youtu&period;be&sol;c7xM94ZCaF4"><img src&equals;"https&colon;&sol;&sol;i&period;ytimg&period;com&sol;vi&sol;c7xM94ZCaF4&sol;hqdefault&period;jpg" layout&equals;"fill" object-fit&equals;"cover" alt&equals;"Android BottomSheet Example in Kotlin"><&sol;a><&sol;amp-youtube><&sol;p> &NewLine;<p>&nbsp&semi;<&sol;p> &NewLine;<h4><span style&equals;"color&colon; &num;000080&semi;"><strong>BottomSheet<&sol;strong><&sol;span><&sol;h4> &NewLine; &NewLine; &NewLine; &NewLine;<p class&equals;"p1">A <span style&equals;"color&colon; &num;008000&semi;"><b>BottomSheet<&sol;b><&sol;span> is a component that is used to display some information by sliding the view up from the bottom of the screen and also&comma; you can hide this BottomSheet when the message is conveyed to the users&period; This is a nice way of conveying some message or performing some task in Android&period;<&sol;p> &NewLine; &NewLine; &NewLine; &NewLine;<h4 class&equals;"p1 wp-block-heading"><span style&equals;"color&colon; &num;000080&semi;"><b>Types of BottomSheet<&sol;b><&sol;span><&sol;h4> &NewLine; &NewLine; &NewLine; &NewLine;<p class&equals;"p2">BottomSheets is of two types&colon;<&sol;p> &NewLine; &NewLine; &NewLine; &NewLine;<p><b><span style&equals;"color&colon; &num;0000ff&semi;">Persistent BottomSheet<&sol;span>&colon;<&sol;b><&sol;p> &NewLine;<ul class&equals;"ul1 wp-block-list"> &NewLine;<li class&equals;"li2">The Persistent BottomSheet is visible along with other UI components on the screen&period;<&sol;li> &NewLine;<li class&equals;"li2">Initially&comma; some content of this Persistent BottomSheet is visible&lpar;you can set the peek height i&period;e&period; the initial height of BottomSheet to 0 also&rpar; and when you slide it up&comma; then the rest of the content will appear along with the BottomSheet&period;<&sol;li> &NewLine;<&sol;ul> &NewLine;<p>The following is an example of Persistent BottomSheet&colon;<&sol;p> &NewLine;<figure id&equals;"attachment&lowbar;2720" aria-describedby&equals;"caption-attachment-2720" style&equals;"width&colon; 327px" class&equals;"wp-caption alignright"><img class&equals;"wp-image-2720" src&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;wp-content&sol;uploads&sol;2021&sol;07&sol;persistentbs1-576x1024&period;png" alt&equals;"" width&equals;"327" height&equals;"581" &sol;><figcaption id&equals;"caption-attachment-2720" class&equals;"wp-caption-text"><strong><span style&equals;"color&colon; &num;800080&semi;">The bottom sheet contains location information over a map&period;<&sol;span><&sol;strong><&sol;figcaption><&sol;figure> &NewLine;<figure id&equals;"attachment&lowbar;2721" aria-describedby&equals;"caption-attachment-2721" style&equals;"width&colon; 305px" class&equals;"wp-caption alignnone"><img class&equals;"wp-image-2721" src&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;wp-content&sol;uploads&sol;2021&sol;07&sol;pbs2-576x1024&period;png" alt&equals;"" width&equals;"305" height&equals;"543" &sol;><figcaption id&equals;"caption-attachment-2721" class&equals;"wp-caption-text"><span style&equals;"color&colon; &num;800080&semi;"><strong>The bottom sheet contains media controls in a music app&period;<&sol;strong><&sol;span><&sol;figcaption><&sol;figure> &NewLine;<p class&equals;"p2"> <&sol;p> &NewLine; &NewLine; &NewLine; &NewLine;<p><b><span style&equals;"color&colon; &num;0000ff&semi;">Modal BottomSheet<&sol;span>&colon;<&sol;b> <&sol;p> &NewLine;<ul class&equals;"wp-block-list"> &NewLine;<li>Modal bottom sheets present a set of choices while blocking interaction with the rest of the screen&period;<&sol;li> &NewLine;<li>Unlike Persistent BottomSheet&comma; it is totally invisible initially&comma; and on certain actions &lpar;maybe a button click&rpar;&comma; it appears from the bottom of the screen&period;<&sol;li> &NewLine;<li>It generally contains some list of items and the items of the list correspond to some action&period;<&sol;li> &NewLine;<li><strong>Modal bottom sheets<&sol;strong> are an alternative to inline menus or simple dialogs on mobile and provide room for additional items&comma; longer descriptions&comma; and iconography&period; <&sol;li> &NewLine;<&sol;ul> &NewLine;<p>The following is an example of Modal BottomSheet&colon;<&sol;p> &NewLine;<figure id&equals;"attachment&lowbar;2722" aria-describedby&equals;"caption-attachment-2722" style&equals;"width&colon; 314px" class&equals;"wp-caption alignnone"><img class&equals;"wp-image-2722" src&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;wp-content&sol;uploads&sol;2021&sol;07&sol;modalBottomsheet1-576x1024&period;png" alt&equals;"" width&equals;"314" height&equals;"558" &sol;><figcaption id&equals;"caption-attachment-2722" class&equals;"wp-caption-text"><strong><span style&equals;"color&colon; &num;800080&semi;">Use the bottom sheet to present additional screen actions&period;<&sol;span><&sol;strong><&sol;figcaption><&sol;figure> &NewLine;<figure id&equals;"attachment&lowbar;2723" aria-describedby&equals;"caption-attachment-2723" style&equals;"width&colon; 326px" class&equals;"wp-caption alignnone"><img class&equals;"wp-image-2723" src&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;wp-content&sol;uploads&sol;2021&sol;07&sol;modalbottomsheet2-576x1024&period;png" alt&equals;"" width&equals;"326" height&equals;"580" &sol;><figcaption id&equals;"caption-attachment-2723" class&equals;"wp-caption-text"><strong><span style&equals;"color&colon; &num;800080&semi;">bottom sheet to provide deep links to another app&period;<&sol;span><&sol;strong><&sol;figcaption><&sol;figure> &NewLine; &NewLine; &NewLine; &NewLine;<h4 class&equals;"p1 wp-block-heading"><span style&equals;"color&colon; &num;000080&semi;"><b>States of BottomSheet<&sol;b><&sol;span><&sol;h4> &NewLine; &NewLine; &NewLine; &NewLine;<p class&equals;"p2">Bottom sheets have 5 states and with the help of these states&comma; we can perform various actions according to our needs&period;<&sol;p> &NewLine; &NewLine; &NewLine; &NewLine; &NewLine; &NewLine;<ul class&equals;"ul1 wp-block-list"> &NewLine;<li class&equals;"li2"><b><span style&equals;"color&colon; &num;0000ff&semi;">STATE&lowbar;COLLAPSED<&sol;span>&colon;<&sol;b> This state indicates that the BottomSheet is collapsed i&period;e&period; the bottom sheet is visible up to its peek height only&period;<&sol;li> &NewLine;<li class&equals;"li2"><b><span style&equals;"color&colon; &num;0000ff&semi;">STATE&lowbar;EXPANDED<&sol;span>&colon;<&sol;b> This state indicates that the BottomSheet is fully expanded to its maximum height and all the content of the BottomSheet is visible&period;<&sol;li> &NewLine;<li class&equals;"li2"><b><span style&equals;"color&colon; &num;0000ff&semi;">STATE&lowbar;DRAGGING<&sol;span>&colon;<&sol;b> This state indicates that the BottomSheet is dragging either in the upward direction or in the downward direction&period;<&sol;li> &NewLine;<li class&equals;"li2"><b><span style&equals;"color&colon; &num;0000ff&semi;">STATE&lowbar;SETTLING<&sol;span>&colon;<&sol;b> This state indicates that the BottomSheet is settling either to the max height or to the peek height&period; &lpar;Sometimes height can be 0 also when behavior&lowbar;hideable is set to true&rpar;<&sol;li> &NewLine;<li class&equals;"li2"><b><span style&equals;"color&colon; &num;0000ff&semi;">STATE&lowbar;HIDDEN<&sol;span>&colon;<&sol;b> This state indicates that the BottomSheet is hidden i&period;e&period; it is possible only when the value of <strong><span style&equals;"color&colon; &num;008000&semi;">behavior&lowbar;hideable<&sol;span><&sol;strong> is set to <strong><span style&equals;"color&colon; &num;008000&semi;">true<&sol;span><&sol;strong>&period; Once&comma; the BottomSheet is hidden&comma; you can&&num;8217&semi;t scroll it to make it visible&period; To make it visible again&comma; you need to change its state by some action &lpar;maybe on some button click&rpar;&period;<&sol;li> &NewLine;<&sol;ul> &NewLine;<p><span style&equals;"color&colon; &num;0000ff&semi;"><b><i>NOTE&colon;<&sol;i><&sol;b><&sol;span> These states are for Persistent BottomSheet&period;<&sol;p> &NewLine; &NewLine; &NewLine; &NewLine;<h4 class&equals;"wp-block-heading"><span style&equals;"color&colon; &num;000080&semi;"><strong>Creating new project<&sol;strong><&sol;span><&sol;h4> &NewLine; &NewLine; &NewLine; &NewLine;<ol class&equals;"wp-block-list"> &NewLine;<li>Create a new project by going to <span style&equals;"color&colon; &num;008000&semi;"><b>File <&sol;b><span class&equals;"s1"><b>&Implies;<&sol;b><&sol;span><&sol;span><b><span style&equals;"color&colon; &num;008000&semi;"> New Android Project<&sol;span>&comma;<&sol;b> select<span style&equals;"color&colon; &num;008000&semi;"> <strong>Empty Activity<&sol;strong><&sol;span>&comma; provide <span style&equals;"color&colon; &num;008000&semi;"><strong>app name<&sol;strong><&sol;span>&comma; select language to <strong><span style&equals;"color&colon; &num;008000&semi;">kotlin<&sol;span> <&sol;strong>and then finally click on <span style&equals;"color&colon; &num;0000ff&semi;"><strong>finish<&sol;strong><&sol;span>&period;<&sol;li> &NewLine;<li> &NewLine;<p>Open app-level <span style&equals;"color&colon; &num;008000&semi;"><strong>build&period;gradle<&sol;strong><&sol;span> file&comma; add the dependency of material design&comma; and sync the project&period;<&sol;p> &NewLine;<&sol;li> &NewLine;<&sol;ol> &NewLine; &NewLine; &NewLine; &NewLine;<p><span style&equals;"color&colon; &num;0000ff&semi;"><strong>build&period;gradle<&sol;strong><&sol;span><&sol;p> &NewLine; &NewLine; &NewLine; &NewLine;<pre class&equals;"wp-block-preformatted">dependencies &lbrace; &NewLine; <span style&equals;"color&colon; &num;008000&semi;"><strong>&sol;&sol;material design<&sol;strong><&sol;span> &NewLine; implementation 'com&period;google&period;android&period;material&colon;material&colon;1&period;4&period;0' &NewLine;&rcub;<&sol;pre> &NewLine; &NewLine; &NewLine; &NewLine;<p>Find the latest version of the material design from <a class&equals;"markup--anchor" href&equals;"https&colon;&sol;&sol;maven&period;google&period;com&sol;web&sol;index&period;html&quest;q&equals;material&num;com&period;google&period;android&period;material&colon;material" target&equals;"&lowbar;blank" rel&equals;"noopener"><strong><span style&equals;"color&colon; &num;0000ff&semi;">here<&sol;span><&sol;strong>&period;<&sol;a><&sol;p> &NewLine; &NewLine; &NewLine; &NewLine;<h4 class&equals;"p1"><span style&equals;"color&colon; &num;000080&semi;"><b>Persistent BottomSheet Example<&sol;b><&sol;span><&sol;h4> &NewLine; &NewLine; &NewLine; &NewLine;<p>1 &period; The layout file <span style&equals;"color&colon; &num;008000&semi;"><strong>layout&lowbar;bottom&lowbar;sheet&period;xml<&sol;strong><&sol;span> represents the UI of the Persistent BottomSheet&period; It consists of two text views&comma; one for the title and one for the description&period;<&sol;p> &NewLine; &NewLine; &NewLine; &NewLine;<p><strong><span style&equals;"color&colon; &num;0000ff&semi;">layout&lowbar;bottom&lowbar;sheet&period;xml<&sol;span><&sol;strong><&sol;p> &NewLine; &NewLine; &NewLine; &NewLine;<pre class&equals;"wp-block-preformatted">&lt&semi;&quest;xml version&equals;"1&period;0" encoding&equals;"utf-8"&quest;&gt&semi; &NewLine;&lt&semi;androidx&period;constraintlayout&period;widget&period;ConstraintLayout xmlns&colon;android&equals;"http&colon;&sol;&sol;schemas&period;android&period;com&sol;apk&sol;res&sol;android" &NewLine; xmlns&colon;app&equals;"http&colon;&sol;&sol;schemas&period;android&period;com&sol;apk&sol;res-auto" &NewLine; android&colon;id&equals;"&commat;&plus;id&sol;bottomSheet" &NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent" &NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content" &NewLine; android&colon;background&equals;"&commat;color&sol;colorPrimaryDark" &NewLine; app&colon;behavior&lowbar;hideable&equals;"false" &NewLine; app&colon;behavior&lowbar;peekHeight&equals;"40dp" &NewLine; app&colon;layout&lowbar;behavior&equals;"com&period;google&period;android&period;material&period;bottomsheet&period;BottomSheetBehavior"&gt&semi; &NewLine; &NewLine; &lt&semi;TextView &NewLine; android&colon;id&equals;"&commat;&plus;id&sol;tvTitle" &NewLine; android&colon;layout&lowbar;width&equals;"0dp" &NewLine; android&colon;layout&lowbar;height&equals;"40dp" &NewLine; android&colon;layout&lowbar;marginStart&equals;"16dp" &NewLine; android&colon;layout&lowbar;marginEnd&equals;"16dp" &NewLine; android&colon;gravity&equals;"center&lowbar;vertical" &NewLine; android&colon;text&equals;"&commat;string&sol;title" &NewLine; android&colon;textColor&equals;"&commat;android&colon;color&sol;white" &NewLine; android&colon;textSize&equals;"22sp" &NewLine; android&colon;textStyle&equals;"bold" &NewLine; app&colon;layout&lowbar;constraintEnd&lowbar;toEndOf&equals;"parent" &NewLine; app&colon;layout&lowbar;constraintStart&lowbar;toStartOf&equals;"parent" &NewLine; app&colon;layout&lowbar;constraintTop&lowbar;toTopOf&equals;"parent" &sol;&gt&semi; &NewLine; &NewLine; &lt&semi;TextView &NewLine; android&colon;id&equals;"&commat;&plus;id&sol;tvSubtitle" &NewLine; android&colon;layout&lowbar;width&equals;"0dp" &NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content" &NewLine; android&colon;layout&lowbar;margin&equals;"16dp" &NewLine; android&colon;text&equals;"&commat;string&sol;description" &NewLine; android&colon;textColor&equals;"&commat;android&colon;color&sol;white" &NewLine; android&colon;textSize&equals;"16sp" &NewLine; app&colon;layout&lowbar;constraintBottom&lowbar;toBottomOf&equals;"parent" &NewLine; app&colon;layout&lowbar;constraintEnd&lowbar;toEndOf&equals;"parent" &NewLine; app&colon;layout&lowbar;constraintStart&lowbar;toStartOf&equals;"parent" &NewLine; app&colon;layout&lowbar;constraintTop&lowbar;toBottomOf&equals;"&commat;&plus;id&sol;tvTitle" &sol;&gt&semi; &NewLine; &NewLine;&lt&semi;&sol;androidx&period;constraintlayout&period;widget&period;ConstraintLayout&gt&semi;<&sol;pre> &NewLine; &NewLine; &NewLine; &NewLine;<ul> &NewLine;<li><span style&equals;"color&colon; &num;0000ff&semi;"><strong>com&period;google&period;android&period;material&period;bottomsheet&period;BottomSheetBehavior<&sol;strong><&sol;span> &colon; defines the layout behavior&period;<&sol;li> &NewLine;<&sol;ul> &NewLine; &NewLine; &NewLine; &NewLine; &NewLine; &NewLine;<ul class&equals;"ul1 wp-block-list"> &NewLine;<li class&equals;"li1"><b><span style&equals;"color&colon; &num;0000ff&semi;">behavior&lowbar;hideable<&sol;span>&colon;<&sol;b> used to set if the bottom sheet can be hidden totally when we drag it down or not&period;<&sol;li> &NewLine;<li class&equals;"li1"><b><span style&equals;"color&colon; &num;0000ff&semi;">behavior&lowbar;peekHeight<&sol;span>&colon;<&sol;b> This is the height up to which the bottom sheet will be visible in the collapsed state&period;<&sol;li> &NewLine;<&sol;ul> &NewLine; &NewLine; &NewLine; &NewLine;<p>2&period; Add <strong><span style&equals;"color&colon; &num;0000ff&semi;">layout&lowbar;bottom&lowbar;sheet&period;xml <&sol;span><&sol;strong>layout to the <span style&equals;"color&colon; &num;008000&semi;"><strong>activity&lowbar;main&period;xml<&sol;strong> <&sol;span>file&period; It consists of three buttons&comma; one for Persistent BottomSheet&comma; one for BottomSheetDialog&comma; and one for BottomSheetDialogFragment&period;<&sol;p> &NewLine; &NewLine; &NewLine; &NewLine;<p><strong><span style&equals;"color&colon; &num;0000ff&semi;">activity&lowbar;main&period;xml<&sol;span> <&sol;strong><&sol;p> &NewLine; &NewLine; &NewLine; &NewLine;<pre class&equals;"wp-block-preformatted">&lt&semi;&quest;xml version&equals;"1&period;0" encoding&equals;"utf-8"&quest;&gt&semi; &NewLine;&lt&semi;androidx&period;coordinatorlayout&period;widget&period;CoordinatorLayout xmlns&colon;android&equals;"http&colon;&sol;&sol;schemas&period;android&period;com&sol;apk&sol;res&sol;android" &NewLine; xmlns&colon;tools&equals;"http&colon;&sol;&sol;schemas&period;android&period;com&sol;tools" &NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent" &NewLine; android&colon;layout&lowbar;height&equals;"match&lowbar;parent" &NewLine; tools&colon;context&equals;"&period;MainActivity"&gt&semi; &NewLine; &NewLine; &lt&semi;androidx&period;appcompat&period;widget&period;AppCompatButton &NewLine; android&colon;id&equals;"&commat;&plus;id&sol;btnBottomSheet" &NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent" &NewLine; android&colon;layout&lowbar;height&equals;"60dp" &NewLine; android&colon;layout&lowbar;marginStart&equals;"12dp" &NewLine; android&colon;layout&lowbar;marginEnd&equals;"12dp" &NewLine; android&colon;text&equals;"Show Bottom Sheet" &sol;&gt&semi; &NewLine; &NewLine; &lt&semi;Button &NewLine; android&colon;id&equals;"&commat;&plus;id&sol;btnBottomSheetDialog" &NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent" &NewLine; android&colon;layout&lowbar;height&equals;"60dp" &NewLine; android&colon;layout&lowbar;marginStart&equals;"12dp" &NewLine; android&colon;layout&lowbar;marginTop&equals;"60dp" &NewLine; android&colon;layout&lowbar;marginEnd&equals;"12dp" &NewLine; android&colon;text&equals;"Show Bottom Sheet Dialog" &sol;&gt&semi; &NewLine; &NewLine; &lt&semi;Button &NewLine; android&colon;id&equals;"&commat;&plus;id&sol;btnBottomSheetDialogFragment" &NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent" &NewLine; android&colon;layout&lowbar;height&equals;"60dp" &NewLine; android&colon;layout&lowbar;marginStart&equals;"12dp" &NewLine; android&colon;layout&lowbar;marginTop&equals;"120dp" &NewLine; android&colon;layout&lowbar;marginEnd&equals;"12dp" &NewLine; android&colon;text&equals;"Show Bottom Sheet Dialog Fragment" &sol;&gt&semi; &NewLine; &NewLine; <span style&equals;"color&colon; &num;008000&semi;"><strong>&lt&semi;include layout&equals;"&commat;layout&sol;layout&lowbar;bottom&lowbar;sheet" &sol;&gt&semi;<&sol;strong><&sol;span> &NewLine; &NewLine;&lt&semi;&sol;androidx&period;coordinatorlayout&period;widget&period;CoordinatorLayout&gt&semi;<&sol;pre> &NewLine; &NewLine; &NewLine; &NewLine;<p class&equals;"p1"><strong><span style&equals;"color&colon; &num;0000ff&semi;">Note&colon;<&sol;span><&sol;strong> BottomSheet is the direct child of the CoordinatorLayout&period;<&sol;p> &NewLine; &NewLine; &NewLine; &NewLine;<p class&equals;"p1">3 &period; The MainActivity contains the following code&colon;<&sol;p> &NewLine; &NewLine; &NewLine; &NewLine;<p><strong><span style&equals;"color&colon; &num;0000ff&semi;">MainActivity&period;kt<&sol;span><&sol;strong><&sol;p>&NewLine;<&excl;-- WP QUADS Content Ad Plugin v&period; 2&period;0&period;98&period;1 -->&NewLine;<div class&equals;"quads-location quads-ad2" id&equals;"quads-ad2" style&equals;"float&colon;none&semi;margin&colon;0px&semi;">&NewLine;&NewLine;<&sol;div>&NewLine; &NewLine; &NewLine; &NewLine; &NewLine;<pre class&equals;"wp-block-preformatted">package com&period;c1ctech&period;androidbottomsheetexp &NewLine; &NewLine;import android&period;os&period;Bundle &NewLine;import android&period;view&period;View &NewLine;import android&period;widget&period;RelativeLayout &NewLine;import android&period;widget&period;Toast &NewLine;import androidx&period;appcompat&period;app&period;AppCompatActivity &NewLine;import androidx&period;constraintlayout&period;widget&period;ConstraintLayout &NewLine;import com&period;google&period;android&period;material&period;bottomsheet&period;BottomSheetBehavior &NewLine;import com&period;google&period;android&period;material&period;bottomsheet&period;BottomSheetDialog &NewLine;import kotlinx&period;android&period;synthetic&period;main&period;activity&lowbar;main&period;&ast; &NewLine;import kotlinx&period;android&period;synthetic&period;main&period;layout&lowbar;bottom&lowbar;sheet&period;&ast; &NewLine; &NewLine; &NewLine;class MainActivity &colon; AppCompatActivity&lpar;&rpar; &lbrace; &NewLine; private lateinit var bottomSheetBehavior&colon; BottomSheetBehavior&lt&semi;ConstraintLayout&gt&semi; &NewLine; &NewLine; override fun onCreate&lpar;savedInstanceState&colon; Bundle&quest;&rpar; &lbrace; &NewLine; super&period;onCreate&lpar;savedInstanceState&rpar; &NewLine; setContentView&lpar;R&period;layout&period;activity&lowbar;main&rpar; &NewLine; bottomSheetBehavior &equals; BottomSheetBehavior&period;from&lpar;bottomSheet&rpar; &NewLine; &NewLine; bottomSheetBehavior&period;addBottomSheetCallback&lpar;object &colon; &NewLine; BottomSheetBehavior&period;BottomSheetCallback&lpar;&rpar; &lbrace; &NewLine; &NewLine; override fun onSlide&lpar;bottomSheet&colon; View&comma; slideOffset&colon; Float&rpar; &lbrace; &NewLine; <span style&equals;"color&colon; &num;008000&semi;"><strong> &sol;&sol; handle onSlide<&sol;strong><&sol;span> &NewLine; &rcub; &NewLine; &NewLine; override fun onStateChanged&lpar;bottomSheet&colon; View&comma; newState&colon; Int&rpar; &lbrace; &NewLine; when &lpar;newState&rpar; &lbrace; &NewLine; BottomSheetBehavior&period;STATE&lowbar;COLLAPSED -&gt&semi; Toast&period;makeText&lpar; &NewLine; this&commat;MainActivity&comma; &NewLine; "STATE&lowbar;COLLAPSED"&comma; &NewLine; Toast&period;LENGTH&lowbar;SHORT &NewLine; &rpar;&period;show&lpar;&rpar; &NewLine; BottomSheetBehavior&period;STATE&lowbar;EXPANDED -&gt&semi; Toast&period;makeText&lpar; &NewLine; this&commat;MainActivity&comma; &NewLine; "STATE&lowbar;EXPANDED"&comma; &NewLine; Toast&period;LENGTH&lowbar;SHORT &NewLine; &rpar;&period;show&lpar;&rpar; &NewLine; BottomSheetBehavior&period;STATE&lowbar;DRAGGING -&gt&semi; Toast&period;makeText&lpar; &NewLine; this&commat;MainActivity&comma; &NewLine; "STATE&lowbar;DRAGGING"&comma; &NewLine; Toast&period;LENGTH&lowbar;SHORT &NewLine; &rpar;&period;show&lpar;&rpar; &NewLine; BottomSheetBehavior&period;STATE&lowbar;SETTLING -&gt&semi; Toast&period;makeText&lpar; &NewLine; this&commat;MainActivity&comma; &NewLine; "STATE&lowbar;SETTLING"&comma; &NewLine; Toast&period;LENGTH&lowbar;SHORT &NewLine; &rpar;&period;show&lpar;&rpar; &NewLine; BottomSheetBehavior&period;STATE&lowbar;HIDDEN -&gt&semi; Toast&period;makeText&lpar; &NewLine; this&commat;MainActivity&comma; &NewLine; "STATE&lowbar;HIDDEN"&comma; &NewLine; Toast&period;LENGTH&lowbar;SHORT &NewLine; &rpar;&period;show&lpar;&rpar; &NewLine; else -&gt&semi; Toast&period;makeText&lpar;this&commat;MainActivity&comma; "OTHER&lowbar;STATE"&comma; Toast&period;LENGTH&lowbar;SHORT&rpar; &NewLine; &period;show&lpar;&rpar; &NewLine; &rcub; &NewLine; &rcub; &NewLine; &rcub;&rpar; &NewLine; &NewLine; btnBottomSheet&period;setOnClickListener &lbrace; &NewLine; if &lpar;bottomSheetBehavior&period;state &equals;&equals; BottomSheetBehavior&period;STATE&lowbar;EXPANDED&rpar; &lbrace; &NewLine; bottomSheetBehavior&period;state &equals; BottomSheetBehavior&period;STATE&lowbar;COLLAPSED &NewLine; &NewLine; &rcub; else &lbrace; &NewLine; bottomSheetBehavior&period;state &equals; BottomSheetBehavior&period;STATE&lowbar;EXPANDED &NewLine; &NewLine; &rcub; &NewLine; &rcub; &NewLine; &rcub; &NewLine;&rcub; &NewLine;<&sol;pre> &NewLine; &NewLine; &NewLine; &NewLine;<ul> &NewLine;<li><strong><span style&equals;"color&colon; &num;0000ff&semi;">onStateChanged&lpar;&rpar;<&sol;span><&sol;strong>&colon; override to observe various states of the BottomSheet&period;<&sol;li> &NewLine;<&sol;ul> &NewLine; &NewLine; &NewLine; &NewLine;<p class&equals;"p1">Here&comma; On click of the button&comma; we are changing its state i&period;e&period; when it is expanded then we are collapsing it and vice-versa&period;<&sol;p> &NewLine; &NewLine; &NewLine; &NewLine;<p class&equals;"p1">4&period; Run the app&comma; the bottom sheet displayed at the bottom&period; Observe the various states of the BottomSheet&period;<&sol;p> &NewLine; &NewLine; &NewLine; &NewLine;<figure class&equals;"wp-block-image"><img class&equals;"wp-image-2712" src&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;wp-content&sol;uploads&sol;2021&sol;07&sol;Screenshot&lowbar;1626516461-576x1024&period;png" alt&equals;"" width&equals;"313" height&equals;"557" data-wp-editing&equals;"1" &sol;>              <img class&equals;"wp-image-2713" src&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;wp-content&sol;uploads&sol;2021&sol;07&sol;Screenshot&lowbar;1626516469-576x1024&period;png" alt&equals;"" width&equals;"313" height&equals;"557" &sol;><&sol;figure> &NewLine; &NewLine; &NewLine; &NewLine; &NewLine; &NewLine;<h4 class&equals;"wp-block-heading"> <&sol;h4> &NewLine;<h4 class&equals;"graf--h3"><span style&equals;"color&colon; &num;000080&semi;"><strong>Modal BottomSheet Example using BottomSheetDialog<&sol;strong><&sol;span><&sol;h4> &NewLine; &NewLine; &NewLine; &NewLine;<p>1 &period; The layout file <span style&equals;"color&colon; &num;008000&semi;"><strong>layout&lowbar;bottom&lowbar;sheet&lowbar;dialog&period;xml<&sol;strong><&sol;span> represents the UI of the Modal BottomSheet creating using BottomSheetDialog&period;<&sol;p> &NewLine;<p><span style&equals;"color&colon; &num;0000ff&semi;"><strong>layout&lowbar;bottom&lowbar;sheet&lowbar;dialog&period;xml<&sol;strong> <&sol;span><&sol;p> &NewLine; &NewLine; &NewLine; &NewLine;<pre class&equals;"wp-block-preformatted">&lt&semi;&quest;xml version&equals;"1&period;0" encoding&equals;"utf-8"&quest;&gt&semi; &NewLine;&lt&semi;androidx&period;constraintlayout&period;widget&period;ConstraintLayout xmlns&colon;android&equals;"http&colon;&sol;&sol;schemas&period;android&period;com&sol;apk&sol;res&sol;android" &NewLine; xmlns&colon;app&equals;"http&colon;&sol;&sol;schemas&period;android&period;com&sol;apk&sol;res-auto" &NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent" &NewLine; android&colon;layout&lowbar;height&equals;"match&lowbar;parent" &NewLine; android&colon;padding&equals;"10dp"&gt&semi; &NewLine; &NewLine; &lt&semi;RelativeLayout &NewLine; android&colon;id&equals;"&commat;&plus;id&sol;rl&lowbar;edit" &NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent" &NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content" &NewLine; android&colon;padding&equals;"8dp" &NewLine; app&colon;layout&lowbar;constraintEnd&lowbar;toEndOf&equals;"parent" &NewLine; app&colon;layout&lowbar;constraintStart&lowbar;toStartOf&equals;"parent" &NewLine; app&colon;layout&lowbar;constraintTop&lowbar;toTopOf&equals;"parent"&gt&semi; &NewLine; &NewLine; &lt&semi;ImageButton &NewLine; android&colon;id&equals;"&commat;&plus;id&sol;imgEdit" &NewLine; android&colon;layout&lowbar;width&equals;"wrap&lowbar;content" &NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content" &NewLine; android&colon;layout&lowbar;alignParentStart&equals;"true" &NewLine; android&colon;layout&lowbar;centerVertical&equals;"true" &NewLine; android&colon;layout&lowbar;marginStart&equals;"6dp" &NewLine; android&colon;background&equals;"&commat;android&colon;color&sol;transparent" &NewLine; android&colon;src&equals;"&commat;drawable&sol;ic&lowbar;edit" &sol;&gt&semi; &NewLine; &NewLine; &lt&semi;TextView &NewLine; android&colon;id&equals;"&commat;&plus;id&sol;tv&lowbar;edit" &NewLine; android&colon;layout&lowbar;width&equals;"wrap&lowbar;content" &NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content" &NewLine; android&colon;layout&lowbar;centerVertical&equals;"true" &NewLine; android&colon;layout&lowbar;marginStart&equals;"6dp" &NewLine; android&colon;layout&lowbar;toRightOf&equals;"&commat;&plus;id&sol;imgEdit" &NewLine; android&colon;text&equals;"Edit" &sol;&gt&semi; &NewLine; &NewLine; &lt&semi;&sol;RelativeLayout&gt&semi; &NewLine; &NewLine; &lt&semi;RelativeLayout &NewLine; android&colon;id&equals;"&commat;&plus;id&sol;rl&lowbar;delete" &NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent" &NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content" &NewLine; android&colon;layout&lowbar;marginTop&equals;"10dp" &NewLine; android&colon;padding&equals;"8dp" &NewLine; app&colon;layout&lowbar;constraintEnd&lowbar;toEndOf&equals;"&commat;&plus;id&sol;rl&lowbar;edit" &NewLine; app&colon;layout&lowbar;constraintStart&lowbar;toStartOf&equals;"&commat;&plus;id&sol;rl&lowbar;edit" &NewLine; app&colon;layout&lowbar;constraintTop&lowbar;toBottomOf&equals;"&commat;&plus;id&sol;rl&lowbar;edit"&gt&semi; &NewLine; &NewLine; &NewLine; &lt&semi;ImageButton &NewLine; android&colon;id&equals;"&commat;&plus;id&sol;imgDelete" &NewLine; android&colon;layout&lowbar;width&equals;"wrap&lowbar;content" &NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content" &NewLine; android&colon;layout&lowbar;alignParentStart&equals;"true" &NewLine; android&colon;layout&lowbar;centerVertical&equals;"true" &NewLine; android&colon;layout&lowbar;marginStart&equals;"6dp" &NewLine; android&colon;background&equals;"&commat;android&colon;color&sol;transparent" &NewLine; android&colon;src&equals;"&commat;drawable&sol;ic&lowbar;delete" &sol;&gt&semi; &NewLine; &NewLine; &lt&semi;TextView &NewLine; android&colon;id&equals;"&commat;&plus;id&sol;tv&lowbar;delete" &NewLine; android&colon;layout&lowbar;width&equals;"wrap&lowbar;content" &NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content" &NewLine; android&colon;layout&lowbar;centerVertical&equals;"true" &NewLine; android&colon;layout&lowbar;marginStart&equals;"6dp" &NewLine; android&colon;layout&lowbar;toRightOf&equals;"&commat;&plus;id&sol;imgDelete" &NewLine; android&colon;text&equals;"Delete" &sol;&gt&semi; &NewLine; &NewLine; &lt&semi;&sol;RelativeLayout&gt&semi; &NewLine; &NewLine; &lt&semi;RelativeLayout &NewLine; android&colon;id&equals;"&commat;&plus;id&sol;rl&lowbar;add" &NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent" &NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content" &NewLine; android&colon;layout&lowbar;marginTop&equals;"10dp" &NewLine; android&colon;padding&equals;"8dp" &NewLine; app&colon;layout&lowbar;constraintEnd&lowbar;toEndOf&equals;"&commat;&plus;id&sol;rl&lowbar;delete" &NewLine; app&colon;layout&lowbar;constraintStart&lowbar;toStartOf&equals;"&commat;&plus;id&sol;rl&lowbar;delete" &NewLine; app&colon;layout&lowbar;constraintTop&lowbar;toBottomOf&equals;"&commat;&plus;id&sol;rl&lowbar;delete"&gt&semi; &NewLine; &NewLine; &lt&semi;ImageButton &NewLine; android&colon;id&equals;"&commat;&plus;id&sol;imgAdd" &NewLine; android&colon;layout&lowbar;width&equals;"wrap&lowbar;content" &NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content" &NewLine; android&colon;layout&lowbar;alignParentStart&equals;"true" &NewLine; android&colon;layout&lowbar;centerVertical&equals;"true" &NewLine; android&colon;layout&lowbar;marginStart&equals;"6dp" &NewLine; android&colon;background&equals;"&commat;android&colon;color&sol;transparent" &NewLine; android&colon;src&equals;"&commat;drawable&sol;ic&lowbar;add" &sol;&gt&semi; &NewLine; &NewLine; &lt&semi;TextView &NewLine; android&colon;id&equals;"&commat;&plus;id&sol;tv&lowbar;add" &NewLine; android&colon;layout&lowbar;width&equals;"wrap&lowbar;content" &NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content" &NewLine; android&colon;layout&lowbar;centerVertical&equals;"true" &NewLine; android&colon;layout&lowbar;marginStart&equals;"6dp" &NewLine; android&colon;layout&lowbar;toRightOf&equals;"&commat;&plus;id&sol;imgAdd" &NewLine; android&colon;text&equals;"Add" &sol;&gt&semi; &NewLine; &NewLine; &lt&semi;&sol;RelativeLayout&gt&semi; &NewLine; &NewLine;&lt&semi;&sol;androidx&period;constraintlayout&period;widget&period;ConstraintLayout&gt&semi;<&sol;pre> &NewLine; &NewLine; &NewLine; &NewLine;<p>2 &period; In MainActivity&comma; add the below function which is invoked on <span style&equals;"color&colon; &num;008000&semi;"><strong>BottomSheetDialog<&sol;strong><&sol;span> button click&period;<&sol;p> &NewLine; &NewLine; &NewLine; &NewLine;<pre class&equals;"wp-block-preformatted"><strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;setting clicklistener<&sol;span><&sol;strong><br &sol;> btnBottomSheetDialog&period;setOnClickListener &lbrace; &NewLine; showBottomSheetDialog&lpar;&rpar; &NewLine; &rcub; &NewLine; &NewLine;private fun showBottomSheetDialog&lpar;&rpar; &lbrace; &NewLine; &NewLine; val dialog &equals; BottomSheetDialog&lpar;this&rpar; &NewLine; &NewLine; dialog&period;setContentView&lpar;R&period;layout&period;layout&lowbar;bottom&lowbar;sheet&lowbar;dialog&rpar; &NewLine; &NewLine; val RLEdit &equals; dialog&period;findViewById&lt&semi;RelativeLayout&gt&semi;&lpar;R&period;id&period;rl&lowbar;edit&rpar; &NewLine; val RLDelete &equals; dialog&period;findViewById&lt&semi;RelativeLayout&gt&semi;&lpar;R&period;id&period;rl&lowbar;delete&rpar; &NewLine; val RLAdd &equals; dialog&period;findViewById&lt&semi;RelativeLayout&gt&semi;&lpar;R&period;id&period;rl&lowbar;add&rpar; &NewLine; &NewLine; RLEdit&quest;&period;setOnClickListener &lbrace; &sol;&sol;handle click event &NewLine; Toast&period;makeText&lpar;this&comma; "Perform edit operation"&comma; Toast&period;LENGTH&lowbar;SHORT&rpar;&period;show&lpar;&rpar; &NewLine; &rcub; &NewLine; RLDelete&quest;&period;setOnClickListener &lbrace; &sol;&sol;handle click event &NewLine; Toast&period;makeText&lpar;this&comma; "Perform delete operation"&comma; Toast&period;LENGTH&lowbar;SHORT&rpar;&period;show&lpar;&rpar; &NewLine; &rcub; &NewLine; RLAdd&quest;&period;setOnClickListener &lbrace; &sol;&sol;handle click event &NewLine; Toast&period;makeText&lpar;this&comma; "Perform add operation"&comma; Toast&period;LENGTH&lowbar;SHORT&rpar;&period;show&lpar;&rpar; &NewLine; &rcub; &NewLine; dialog&period;show&lpar;&rpar; &NewLine;&rcub;<&sol;pre> &NewLine; &NewLine; &NewLine; &NewLine;<p>Here&comma; after creating BottomSheetDialog instance&colon;<&sol;p> &NewLine; &NewLine; &NewLine; &NewLine;<ul class&equals;"wp-block-list"> &NewLine;<li>set dialog layout using <strong><span style&equals;"color&colon; &num;008000&semi;">setContentView&lpar;&rpar;<&sol;span><&sol;strong>&period;<&sol;li> &NewLine;<li>get dialog views by its id and set click listeners on it&period;<&sol;li> &NewLine;<&sol;ul> &NewLine; &NewLine; &NewLine; &NewLine;<p>3 &period; Run the app&comma; the bottom sheet is displayed at the bottom of the screen&period;<img class&equals;"wp-image-2714" src&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;wp-content&sol;uploads&sol;2021&sol;07&sol;Screenshot&lowbar;1626516492-576x1024&period;png" alt&equals;"" width&equals;"355" height&equals;"631" &sol;>      <img class&equals;"alignnone wp-image-2718" src&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;wp-content&sol;uploads&sol;2021&sol;07&sol;Screenshot&lowbar;1626541813-576x1024&period;png" alt&equals;"" width&equals;"350" height&equals;"622" &sol;><&sol;p> &NewLine; &NewLine; &NewLine; &NewLine; &NewLine; &NewLine;<h4 class&equals;"wp-block-heading"> <&sol;h4> &NewLine;<h4 class&equals;"graf--h3"><span style&equals;"color&colon; &num;000080&semi;"><strong>Modal BottomSheet Example using BottomSheetDialogFragment<&sol;strong><&sol;span><&sol;h4> &NewLine; &NewLine; &NewLine; &NewLine;<p>1 &period; Create a subclass of <strong><span style&equals;"color&colon; &num;008000&semi;">BottomSheetDialogFragment<&sol;span><&sol;strong> under the root directory&comma; <span style&equals;"color&colon; &num;008000&semi;"><strong>right-click &gt&semi; New &gt&semi; Kotlin File&sol;Class&comma; <&sol;strong><&sol;span>and name it as <strong><span style&equals;"color&colon; &num;008000&semi;">BottomSheetFragment<&sol;span><&sol;strong>&period;<&sol;p> &NewLine;<p><span style&equals;"color&colon; &num;0000ff&semi;"><strong>BottomSheetFragment&period;kt<&sol;strong><&sol;span><&sol;p> &NewLine; &NewLine; &NewLine; &NewLine;<pre class&equals;"wp-block-preformatted">package com&period;c1ctech&period;androidbottomsheetexp &NewLine; &NewLine;import android&period;os&period;Bundle &NewLine;import android&period;view&period;LayoutInflater &NewLine;import android&period;view&period;View &NewLine;import android&period;view&period;ViewGroup &NewLine;import android&period;widget&period;Toast &NewLine;import com&period;google&period;android&period;material&period;bottomsheet&period;BottomSheetDialogFragment &NewLine;import kotlinx&period;android&period;synthetic&period;main&period;layout&lowbar;bottom&lowbar;sheet&lowbar;dialog&period;&ast; &NewLine; &NewLine;class BottomSheetFragment &colon; BottomSheetDialogFragment&lpar;&rpar; &lbrace; &NewLine; &NewLine; companion object &lbrace; &NewLine; &NewLine; const val TAG &equals; "CustomBottomSheetDialogFragment" &NewLine; &NewLine; &rcub; &NewLine; &NewLine; override fun onCreateView&lpar; &NewLine; inflater&colon; LayoutInflater&comma; &NewLine; container&colon; ViewGroup&quest;&comma; &NewLine; savedInstanceState&colon; Bundle&quest; &NewLine; &rpar;&colon; View&quest; &lbrace; &NewLine; return inflater&period;inflate&lpar;R&period;layout&period;layout&lowbar;bottom&lowbar;sheet&lowbar;dialog&comma; container&comma; false&rpar; &NewLine; &rcub; &NewLine; &NewLine; override fun onViewCreated&lpar;view&colon; View&comma; savedInstanceState&colon; Bundle&quest;&rpar; &lbrace; &NewLine; super&period;onViewCreated&lpar;view&comma; savedInstanceState&rpar; &NewLine; &NewLine; rl&lowbar;edit&period;setOnClickListener &lbrace; &NewLine;<span style&equals;"color&colon; &num;008000&semi;"><strong> &sol;&sol;handle click event &NewLine;<&sol;strong><&sol;span> Toast&period;makeText&lpar;context&comma; "Perform edit operation"&comma; Toast&period;LENGTH&lowbar;SHORT&rpar;&period;show&lpar;&rpar; &NewLine; &rcub; &NewLine; rl&lowbar;delete&period;setOnClickListener &lbrace; &NewLine;<strong><span style&equals;"color&colon; &num;008000&semi;"> &sol;&sol;handle click event &NewLine;<&sol;span><&sol;strong> Toast&period;makeText&lpar;context&comma; "Perform delete operation"&comma; Toast&period;LENGTH&lowbar;SHORT&rpar;&period;show&lpar;&rpar; &NewLine; &rcub; &NewLine; rl&lowbar;add&period;setOnClickListener &lbrace; &NewLine;<strong><span style&equals;"color&colon; &num;008000&semi;"> &sol;&sol;handle click event &NewLine;<&sol;span><&sol;strong> Toast&period;makeText&lpar;context&comma; "Perform add operation"&comma; Toast&period;LENGTH&lowbar;SHORT&rpar;&period;show&lpar;&rpar; &NewLine; &rcub; &NewLine; &rcub; &NewLine;&rcub;<&sol;pre> &NewLine; &NewLine; &NewLine; &NewLine;<p class&equals;"p1">Here&comma; we will inflate the layout and handle the button clicks of the inflated layout elements&period;<&sol;p> &NewLine; &NewLine; &NewLine; &NewLine;<p>2 &period; In MainActivity&comma; On click of Button &lpar;btnBottomSheetDialogFragment &rpar;&comma; we will call the DialogFragment <strong><span style&equals;"color&colon; &num;0000ff&semi;">show&lpar;&rpar;<&sol;span><&sol;strong> method which will add the fragment to the fragmentManager and display the dialog&period;<&sol;p> &NewLine; &NewLine; &NewLine; &NewLine;<pre class&equals;"wp-block-preformatted">class MainActivity &colon; AppCompatActivity&lpar;&rpar; &lbrace; &NewLine; &NewLine; override fun onCreate&lpar;savedInstanceState&colon; Bundle&quest;&rpar; &lbrace; &NewLine; super&period;onCreate&lpar;savedInstanceState&rpar; &NewLine; setContentView&lpar;R&period;layout&period;activity&lowbar;main&rpar; &NewLine; &NewLine;<strong><span style&equals;"color&colon; &num;008000&semi;"> &sol;&sol;handle click listener &NewLine;<&sol;span><&sol;strong> btnBottomSheetDialogFragment&period;setOnClickListener &lbrace; &NewLine; showBottomSheetDialogFragment&lpar;&rpar; &NewLine; &rcub; &NewLine; &rcub; &NewLine; &NewLine;<span style&equals;"color&colon; &num;008000&semi;"><strong> &sol;&sol;Display the dialog&comma;adding the fragment to the fragmentManager &NewLine;<&sol;strong><&sol;span> private fun showBottomSheetDialogFragment&lpar;&rpar; &lbrace; &NewLine; BottomSheetFragment&lpar;&rpar;&period;show&lpar;getSupportFragmentManager&lpar;&rpar;&comma; BottomSheetFragment&period;TAG&rpar;&semi; &NewLine; &rcub; &NewLine; &rcub;<&sol;pre> &NewLine; &NewLine; &NewLine;&NewLine;

Exit mobile version