2016-05-08 108 views
6

画面幅よりも幅の狭いボトムシートダイアログを表示したいと思います。例えば透明な背景を持つBottomSheetDialog

、Googleからのストック・オプションは、ネクサス9

the Share option from Google Play Music on a Nexus 9

で音楽を再生し、あなたはこれを達成する方法を知っていますか?

今のところ、シートのコンテンツの幅を縮小したにもかかわらず、背景はまだ画面の幅にあり、白い背景が表示されています。

いくつかのコード:

build.gradle

compile 'com.android.support:design:23.3.0' 

MainActivity

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    ... 

    mBottomSheetDialog = new BottomSheetDialog(this); 
    mBottomSheetDialog.setContentView(R.layout.sheet_test); 
    mBottomSheetDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { 
     @Override 
     public void onDismiss(DialogInterface dialog) { 
      mBottomSheetDialog = null; 
     } 
    }); 
    mBottomSheetDialog.show(); 
} 

sheet_test

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="100dp" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 

     <TextView 
      style="@style/TextAppearance.AppCompat.Body1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_margin="16dp" 
      android:text="Some Text" 
      android:textColor="@color/colorPrimary" /> 

     <View 
      android:layout_width="match_parent" 
      android:layout_height="1dp" 
      android:background="#ddd" /> 

     <TextView 
      style="@style/TextAppearance.AppCompat.Body1" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_margin="16dp" 
      android:text="Some Text" /> 

     <View 
      android:layout_width="match_parent" 
      android:layout_height="1dp" 
      android:background="#ddd" /> 

    </LinearLayout> 

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

にこれを追加デザインライブラリのいくつかのコード:) –

+0

どのバージョンを共有してください、あなたは、を使用して?あなたは最新(23.3.0)で試しましたか? – ianhanniballake

+0

私は親アクティビティーを透明にする必要があると思います。 http://stackoverflow.com/questions/2176922/how-to-create-transparent-activity-in-android – Madushan

答えて

3

にだから、私は2つのソリューションを考え出し変更。

ベスト1:

ちょうどあなたのボトムシートのための透明な背景を持つアクティビティを作成します。 コーディネーターレイアウトとボトムシートを使用して独自のレイアウトを実装します。 必要な余白を設定します。 必要なコンテンツを設定します。

まだテストされていません。

レイジー1:

onActivityCreatedアドオンで、BottomSheetDialogFragment拡張:

Resources resources = getResources(); 

    // Set margin for Landscape Mode. Maybe a more elegant solution will be to implements our own bottom sheet with our own margins. 
    if (resources.getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     assert getView() != null; 
     View parent = (View) getView().getParent(); 
     CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) parent.getLayoutParams(); 
     layoutParams.setMargins(
       resources.getDimensionPixelSize(R.dimen.bottom_sheet_margin_left), // 64dp 
       0, 
       resources.getDimensionPixelSize(R.dimen.bottom_sheet_margin_right), // 64dp 
       0 
     ); 
     parent.setLayoutParams(layoutParams); 
    } 
1

これはあなたの答えです:D

View contentView=LayoutInflater.from(getContext()).inflate(R.layout.bs_add_event,null); 
    mBottomSheetDialog.setContentView(contentView); 

    CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) ((View) contentView.getParent()).getLayoutParams(); 
    params.setMargins(50,50,50,50); // set margin as your wish. 

ともandroid:layout_width="100dp" in nestedScroolViewandroid:layout_width="match_parent"

0

ハックのビットが、それは背景を透明にするために動作します。明らかにあなたはあなたが望むどんな色でも「透明」を置き換えることができます。

mBottomSheetDialog.getWindow().findViewById(R.id.design_bottom_sheet).setBackgroundResource(android.R.color.transparent); 
25

これはBottomSheetDialogFragment

((ビュー)contentView.getParent())のセット透明な背景のための最も簡単な解決策である。setBackgroundColor(getResources()。GETCOLOR(android.R.color。トランスペアレント)); BottomSheetDialogFragmentを使用した場合

public class ShareOneTouchAlertNewBottom extends BottomSheetDialogFragment { 
    @Override 
    public void setupDialog(Dialog dialog, int style) { 
     super.setupDialog(dialog, style); 
     View contentView = View.inflate(getContext(), R.layout.fragment_bottom_sheet, null); 
     dialog.setContentView(contentView); 

     CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) ((View) contentView.getParent()) 
       .getLayoutParams(); 
     CoordinatorLayout.Behavior behavior = params.getBehavior(); 
     ((View) contentView.getParent()).setBackgroundColor(getResources().getColor(android.R.color.transparent)); 
    } 
} 
3

これが私の仕事:

public class CustomDialogFragment extends BottomSheetDialogFragment { 

    @Override 
    public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setStyle(BottomSheetDialogFragment.STYLE_NORMAL, R.style.CustomBottomSheetDialogTheme); 
    } 

    ... 
} 

また、あなたのstyles.xml

<style name="CustomBottomSheetDialogTheme" parent="Theme.Design.Light.BottomSheetDialog"> 
    <item name="bottomSheetStyle">@style/CustomBottomSheetStyle</item> 
</style> 

<style name="CustomBottomSheetStyle" parent="Widget.Design.BottomSheet.Modal"> 
    <item name="android:background">@android:color/transparent</item> 
</style> 
関連する問題