java - 将 Material 持久底板高度设置为屏幕高度的一半?

标签 java android material-design

所以我在协调器布局中创建了一个持久的底部工作表。我可以将 LinearLayout 的高度设置为某个值 500dp 但我想要实现的是将其高度设置为屏幕的一半。我想我必须通过 DisplayMetrics 获取屏幕高度并以某种方式将其应用到 LinearLayout 上


<androidx.coordinatorlayout.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"
    tools:context=".post.PostActivity">

    <LinearLayout
        android:id="@+id/gallery_bottom_sheet"
        android:layout_width="match_parent"
        android:layout_height="500dp"
        android:layout_marginHorizontal="@dimen/margin_very_small"
        android:background="@drawable/background_sheet"
        android:orientation="vertical"
        app:behavior_peekHeight="@dimen/peek_height"
        app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">

        <View
            android:layout_width="@dimen/width_forty"
            android:layout_height="@dimen/divider_large"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="@dimen/margin_small"
            android:layout_marginBottom="@dimen/margin_small"
            android:background="?android:listDivider" />

        <GridView
            android:id="@+id/gallery_grid_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:horizontalSpacing="@dimen/grid_spacing"
            android:nestedScrollingEnabled="true"
            android:numColumns="4"
            android:verticalSpacing="@dimen/grid_spacing" />

    </LinearLayout>


</androidx.coordinatorlayout.widget.CoordinatorLayout>

最佳答案

首先通过DisplayMetrics计算出需要的屏幕高度

DisplayMetrics displayMetrics = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

int halfScreenHeight = displayMetrics.heightPixels / 2;

然后获取现有linearLayoutgetLayoutParams()。设置高度并应用。 (也将其转换为 CoordinatorLayout.LayoutParams)

LinearLayout linearLayout = findViewById(R.id.gallery_bottom_sheet);

CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) linearLayout.getLayoutParams();

params.height = halfScreenHeight;

linearLayout.setLayoutParams(params);

关于java - 将 Material 持久底板高度设置为屏幕高度的一半?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61580283/

相关文章:

android - 如何从 Fragment 类中的 AsyncTask 类的 onPostExecute 函数中删除 fragment

android - 如何创建 View stub ?

android - 底部导航 View 中选定选项卡的颜色

android - 具有 Material Design 风格的自定义 Android 键盘

java - 如何为一个类实例化更多的CDI bean?

java - 如何获取存储在ArrayList<HashMap<key,value>>中的值?

java - android - httpsurlconnection 'get' 405 - 方法不允许

java - 尝试向标记添加信息窗口时遇到困难?

android - 我如何更改 BadgeDrawable Android 中的背景颜色

java - Spring Cloud Stream 应用程序启动器在 10 秒后失败,显示 Bindexception : Cannot initialize binder