LoginSignup
12
12

More than 5 years have passed since last update.

公式BottomSheetDialog(23.2.0)がリリースされたけど挙動が気になったのでちょっといじった【そして23.2.1で直った】

Last updated at Posted at 2016-02-26

最初に

この記事に書いてあることは23.2.1で修正されました。よって、普通に使って問題ありません。やったね!!
(23.2.1での直し方も、この記事で紹介しているのとほぼ同様でした)

Design Support Library 23.2.0がリリースされた

BottomSheetDialogというのでBottomSheetがカジュアルに使えるようになりましたが、ユーザーがダイアログを引っ張り上げすぎると勝手にDialogがcancelされてしまうというあんまり好きじゃない挙動があります。

これが公式なのか意図しない挙動なのかはわかりませんが、現時点ではどうにも直す手段が提供されていないように見えるので、ソースコードを引っ張ってきてちょっとイジりました。

問題箇所

onTouch()でキャンセルしている判定で、ACTION_UP時に指がBottomSheetのコンテンツ部分からはみ出している場合に強制キャンセルされてしまいます。ユーザーが勢い良く引っ張りあげると、大抵の場合コンテンツ部分から指がはみ出ますが、その時に強制的にcancel()が走るのでちょっと困ります。

            coordinator.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    if (isShowing() &&
                            MotionEventCompat.getActionMasked(event) == MotionEvent.ACTION_UP &&
                            !coordinator.isPointInChildBounds(finalView,
                                    (int) event.getX(), (int) event.getY())) {
                        cancel();
                        return true;
                    }
                    return false;
                }
            });;

イジッた結果

githubで公開しています。

ユーザーが引っ張り上げすぎても勝手にキャンセルされない、空白領域(ちょっと暗くなってる半透過部分)をタップした場合のみキャンセルされる、という風になっています。

公式が治った時にライブラリそのものを消せるように、基本的な挙動やクラス名はイジッてません。

コレを導入する場合

ライブラリを追加して、使用するクラス名を下記に変更してください。

  • 変更前
    • android.support.design.widget.BottomSheetDialog
  • 変更後
    • com.eaglesakura.android.design.BottomSheetDialog
repositories {
    maven { url "http://eaglesakura.github.io/maven/" }     // add maven repo
    mavenCentral()
}

dependencies {
    compile 'com.eaglesakura:android-support-bottomsheet:1.0.+' // add library
}

最後に

普通に挙動変更する手段があったらコメントに書いていただけるとありがたいです。

12
12
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
12
12