2016-06-16 8 views
4

ボタンのクリックでアプリケーションにボトムシートのダイアログを表示しようとしています。しかし、ダイアログは部分的に開きます。私はボタンをクリックするだけでダイアログを完全に開きたいです。Androidボトムシートモーダル(ダイアログ)が完全に開かない

私は次のコードを試しました。

MainActivity.java

public class MainActivity extends AppCompatActivity { 

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

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    View showModalBottomSheet = findViewById(R.id.as_modal); 
    showModalBottomSheet.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //Initializing a bottom sheet 
      BottomSheetDialogFragment bottomSheetDialogFragment = new CustomBottomSheetDialogFragment(); 

      //show it 
      bottomSheetDialogFragment.show(getSupportFragmentManager(), bottomSheetDialogFragment.getTag()); 
     } 
    }); 
} 
} 

CustomBottomSheetDialogFragment.java

public class CustomBottomSheetDialogFragment extends BottomSheetDialogFragment { 


@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

private BottomSheetBehavior.BottomSheetCallback mBottomSheetBehaviorCallback = new BottomSheetBehavior.BottomSheetCallback() { 

    @Override 
    public void onStateChanged(@NonNull View bottomSheet, int newState) { 
     if (newState == BottomSheetBehavior.STATE_HIDDEN) { 
      dismiss(); 
     } 
    } 

    @Override 
    public void onSlide(@NonNull View bottomSheet, float slideOffset) { 
    } 
}; 

@Override 
public void setupDialog(Dialog dialog, int style) { 
    super.setupDialog(dialog, style); 
    View contentView = View.inflate(getContext(), R.layout.dialog_modal, null); 
    dialog.setContentView(contentView); 
    CoordinatorLayout.LayoutParams layoutParams = 
      (CoordinatorLayout.LayoutParams) ((View) contentView.getParent()).getLayoutParams(); 
    CoordinatorLayout.Behavior behavior = layoutParams.getBehavior(); 
    if (behavior != null && behavior instanceof BottomSheetBehavior) { 
     ((BottomSheetBehavior) behavior).setBottomSheetCallback(mBottomSheetBehaviorCallback); 
    } 
} 
} 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<android.support.design.widget.AppBarLayout 
    android:id="@+id/app_bar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/AppTheme.AppBarOverlay"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" 
     app:popupTheme="@style/AppTheme.PopupOverlay" /> 

</android.support.design.widget.AppBarLayout> 

<android.support.v4.widget.NestedScrollView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

    <Button 
     android:id="@+id/as_modal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="@dimen/activity_horizontal_margin" 
     android:text="@string/modal" /> 

</android.support.v4.widget.NestedScrollView> 

ここでは、プロジェクトへのリンクを見つけることができます:

Github Project Link

現在の行動:AndroidのサポートライブラリVesion 23.2.0で

Screenshot For Current Behaviour

答えて

1

BottomSheetDialogFragmentBottomSheetDialogはいくつかを持っていました問題。

docは、Androidサポートライブラリの改訂23.2.1(2016年3月)セクションで確認できます。

解決策は、com.android.support:designバージョンを23.2.0以上に更新することです。 (新しいバージョンが何であれ23.2.1,23.3.0,23.4.0)。

私はあなたのコードを新しいバージョンでテストしました。それは正常に働いた。

希望します。

+0

に感謝ジョン問題を解決することができます。それは今の魅力のように働いた。 –

+0

@ShubhamBansal OK。他の人を助けるために私の答えを受け入れてください。 :) – JohnWatsonDev

+0

ありがとう!これは受け入れられた答えでなければなりません。 – YashikaK

1

フラグメントを使用しないでください。BottomSheetDialogを使用してください。モデルダイアログの https://github.com/bita147/BottomSheetDialog

にアップロード サンプルデモはちょうど私のため

bottomshetDialod.setCanceledOnTouchOutside(false); 

作品を設定します。

0

あなたの行動のためのpeekHeight

+1

おそらく回答の詳細は – YakovL

+1

と評価されます: 'bottomSheetBehavior.setPeekHeight(size);' –

0

同じことは、私と一緒に起こっていた設定する必要があります。その背後にある奇妙な理由はToolbar でした。ツールバーを削除すると、ボトムシートがフルスクリーンで表示されます。

私はその理由を知らない。しかし、ツールバーを削除した後、うまくいきました。 これを試すことができます。 setUpDialog方法でこのラインで

1

BottomSheetDialog d = (BottomSheetDialog) dialog; 
FrameLayout bottomSheet = (FrameLayout) d.findViewById(android.support.design.R.id.design_bottom_sheet); 
BottomSheetBehavior.from(bottomSheet).setState(BottomSheetBehavior.STATE_EXPANDED); 
+0

なぜこのように動作するのか分かりませんが、STATE_COLLAPSEDを指す方が良いと思います。 –

関連する問題