Как сделать так, чтобы высота представления соответствовала пространству над NestedScrollView? - PullRequest
0 голосов
/ 06 ноября 2019

Я хочу, чтобы MapView занимал все пространство над постоянным нижним листом (NestedScrollView), как у меня уже есть, и вы видите на изображении ниже.

Example of a NestedScrollView with BottomSheetBehavior combined with map

Для MapView я использую android: layout_height = "238dp" . Я попытался заменить его на android: layout_height = "match_parent" , но затем высота MapView была растянута на весь экран. Вот код, который вы видите на изображении выше.

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:mapbox="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:descendantFocusability="beforeDescendants"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".SpotFormActivity"
    tools:showIn="@layout/spot_form_master_layout">

    <androidx.coordinatorlayout.widget.CoordinatorLayout
        android:id="@+id/save_spot_form_basic"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <androidx.coordinatorlayout.widget.CoordinatorLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <com.mapbox.mapboxsdk.maps.MapView
                android:id="@+id/mapview2"
                android:layout_width="match_parent"
                **android:layout_height="238dp"** />

        </androidx.coordinatorlayout.widget.CoordinatorLayout>

        <androidx.core.widget.NestedScrollView
            android:id="@+id/spot_form_scrollview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#FFF"
            android:paddingBottom="60dp"
     app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
           ....
        </androidx.core.widget.NestedScrollView>

    </androidx.coordinatorlayout.widget.CoordinatorLayout>

Я не хочу использовать android: layout_height = " 238dp " , потому чтов устройствах с большим экраном высота карты не регулируется автоматически. У кого-нибудь есть предложение лучшего способа сделать это?

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

это то, что я использую большую часть времени для изменения высоты элементов, и оно подходит для разных устройств.
сначала получите высоту устройства:

public static int getDaviceHeight(Activity activity){
        DisplayMetrics displayMetrics = new DisplayMetrics();
        activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        height=displayMetrics.heightPixels;
        return height;

    }

, затем измените высоту элементов:

MapView mapView = (MapView) v.findViewById(R.id.mapView2);
        mapView.getLayoutParams().height=(getDaviceHeight(this))/3;
        //ofcourse you can change the number and devide the total height as much as you want 
0 голосов
/ 06 ноября 2019

Вместо CoordinatorLayout используйте Linear Layout таким образом, чтобы -

вес андроида = "0dp" и высота андроида = "1"

Чтобы узнать больше об использовании веса в Linear Layout , проверьте официальный документ ниже: Официальная ссылка

Это решит вашу проблему!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...