代码之家  ›  专栏  ›  技术社区  ›  Ali Ha Quang

底板-不正确的设计行为

  •  2
  • Ali Ha Quang  · 技术社区  · 6 年前

    我一直在试着设置 Bottomsheet 谷歌在谷歌新闻等应用程序中的使用方式,

    这就是谷歌 床单 如下所示

    enter image description here

    在我的 床单 如下所示

    enter image description here

    你会注意到两件事,

    1. 没有圆角
    2. 底部的导航没有混合

    我的代码 bottomsheet 如下所示(为了简单起见,我删除了控件)

    mybottomsheet.xml文件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/bottom_sheet"
        android:elevation="10dp"
        android:minHeight="300dp"
        app:behavior_peekHeight="120dp"
        app:layout_behavior="android.support.design.widget.BottomSheetBehavior">
        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                android:layout_marginBottom="30dp">
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:orientation="vertical">           
                  <!--controls here-->
                </LinearLayout>
            </LinearLayout>
        </ScrollView>
    </LinearLayout>
    

    我在代码中称之为

    View view = LayoutInflater.Inflate(Resource.Layout.MyBottomSheet, null);
    Dialog dialog = new BottomSheetDialog(this);
    dialog.SetContentView(view);
    

    我如何才能得到圆角,并确保底部导航不去透明?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Abhi    6 年前

    要获得google的模式底页设计,请按以下方式实现。首先创建一个可绘制的形状,该形状将用作底部工作表的背景:

    bg_bottomsheet.xml文件

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
        <corners
            android:topLeftRadius="@dimen/bottom_sheet_corner_radius"
            android:topRightRadius="@dimen/bottom_sheet_corner_radius" />
        <padding android:top="@dimen/bottom_sheet_top_padding" />
    <solid android:color="@color/white" />
    

    现在为bottomsheet小部件创建一个自定义样式。

    样式-v21.xml

    <resources>
    
        <style name="BottomSheetDialogTheme" parent="BaseBottomSheetDialog">
            <item name="android:statusBarColor">@android:color/transparent</item>
            <item name="android:navigationBarColor">@color/white</item>
        </style>
    
    </resources>
    

    样式.xml

    <resources>
    
        <style name="BottomSheet" parent="@style/Widget.Design.BottomSheet.Modal">
            <item name="android:background">@drawable/bg_bottom_sheet_dialog_fragment</item>
        </style>
    
        <style name="BaseBottomSheetDialog" parent="@style/Theme.Design.Light.BottomSheetDialog">
            <item name="android:windowIsFloating">false</item>
            <item name="bottomSheetStyle">@style/BottomSheet</item>
        </style>
    
        <style name="BottomSheetDialogTheme" parent="BaseBottomSheetDialog" />
    
    </resources>
    

    现在,扩展 BottomSheetDialogFragment 并为它设定新的主题。就这样!

        2
  •  0
  •   buzzingsilently    6 年前

    尝试使用下面的代码

    View view = LayoutInflater.Inflate(Resource.Layout.MyBottomSheet, null);
    Dialog dialog = new BottomSheetDialog(this);
    dialog.SetContentView(view);
    ((View) view.getParent()).setBackgroundColor(getContext().getResources().getColor(android.R.color.transparent));
    CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) ((View) view.getParent())
                    .getLayoutParams();
    ((View) view.getParent()).setLayoutParams(layoutParams);