layout_weight не работает внутри ScrollView - PullRequest
0 голосов
/ 06 ноября 2018

Я не могу понять, почему layout_weight не работает внутри ScrollView, когда я запускаю этот xml, я получаю изображение, захватывающее весь экран и ниже, что я могу видеть свои вкладки, и viewpager скрыт.

Когда я задаю высоту в dp для всей линейной разметки под ScrollView, я прекрасно понимаю, почему это происходит. я хочу, чтобы мой просмотр изображений занимал 30% экрана, а вкладка / просмотрщик занимал 70% экрана.

<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <com.emilsjolander.components.StickyScrollViewItems.StickyScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">
            <LinearLayout
                android:id="@+id/firstLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:weightSum="10">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:background="@color/gift_vouchr_header_img"
                    android:layout_weight="3"
                    android:adjustViewBounds="true"
                    android:layout_gravity="center">
                    <ImageView
                        android:id="@+id/imageview_gift"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:background="@drawable/splash"/>
                </LinearLayout>

                <LinearLayout
                    android:id="@+id/viewpager_ll"
                    android:layout_width="match_parent"
                    android:background="@color/lvb_divider_color"
                    android:layout_height="0dp"
                    android:orientation="vertical"
                    android:tag="sticky"
                    android:layout_weight="7"
                    android:adjustViewBounds="true"
                    android:layout_gravity="center"
                    >
                    <android.support.design.widget.TabLayout
                        android:id="@+id/common_tablayout"
                        style="@style/VoucherTabLayoutStyle"
                        android:layout_width="match_parent"
                        app:tabGravity="fill"
                        android:layout_height="@dimen/margin_48">
                    </android.support.design.widget.TabLayout>


                    <android.support.v4.view.ViewPager
                        android:id="@+id/common_viewpager"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content">
                    </android.support.v4.view.ViewPager>
                </LinearLayout>
            </LinearLayout>
    </com.emilsjolander.components.StickyScrollViewItems.StickyScrollView>
</LinearLayout>

Когда я удаляю весовую сумму и жестко прописываю высоту, вид работает отлично: ниже мой код:

<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <com.emilsjolander.components.StickyScrollViewItems.StickyScrollView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">
            <LinearLayout
                android:id="@+id/firstLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="160dp"
                    android:background="@color/gift_vouchr_header_img"
                    android:adjustViewBounds="true"
                    android:layout_gravity="center">
                    <ImageView
                        android:id="@+id/imageview_gift"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:background="@drawable/splash"/>
                </LinearLayout>

                <LinearLayout
                    android:id="@+id/viewpager_ll"
                    android:layout_width="match_parent"
                    android:background="@color/lvb_divider_color"
                    android:layout_height="500dp"
                    android:orientation="vertical"
                    android:tag="sticky"
                    android:adjustViewBounds="true"
                    android:layout_gravity="center">

                    <android.support.design.widget.TabLayout
                        android:id="@+id/common_tablayout"
                        style="@style/VoucherTabLayoutStyle"
                        android:layout_width="match_parent"
                        app:tabGravity="fill"
                        android:layout_height="@dimen/margin_48">
                    </android.support.design.widget.TabLayout>


                    <android.support.v4.view.ViewPager
                        android:id="@+id/common_viewpager"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content">
                    </android.support.v4.view.ViewPager>
                </LinearLayout>

            </LinearLayout>
    </com.emilsjolander.components.StickyScrollViewItems.StickyScrollView>
</LinearLayout>

MyTab1 xml:

<?xml version="1.0" encoding="utf-8"?>

<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">



    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/margin_15"
        android:layout_marginRight="@dimen/margin_15"
        android:layout_marginTop="@dimen/margin_15"
        android:orientation="vertical">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@style/gift_amount_footer_txt"
        android:text="@string/validity"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <include layout="@layout/voucher_common_layout"/>

    </LinearLayout>


        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="@style/gift_title_txt"
            android:layout_marginTop="@dimen/margin_26"
            android:text="@string/receiver_detail"/>
        <EditText
            android:id="@+id/receiver_name"
            android:layout_width="match_parent"
            android:layout_height="@dimen/margin_48"
            android:backgroundTint="@color/QuaternaryTextColor"
            android:hint="@string/receiver_name"
            android:paddingLeft="@dimen/margin_2"
            android:layout_marginTop="@dimen/margin_23"/>
        <EditText
            android:id="@+id/receiver_email"
            android:layout_width="match_parent"
            android:layout_height="@dimen/margin_48"
            android:hint="@string/receiver_email"
            android:inputType="textEmailAddress"
            android:backgroundTint="@color/QuaternaryTextColor"

            style="@style/giftEditetxtStyle"
            android:paddingLeft="@dimen/margin_2"
            android:layout_marginTop="@dimen/margin_30"/>
        <EditText
            android:id="@+id/receiver_mobile"
            android:layout_width="match_parent"
            android:layout_height="@dimen/margin_48"
            android:backgroundTint="@color/QuaternaryTextColor"
            android:inputType="phone"
            android:hint="@string/receiver_mobile"
            android:paddingLeft="@dimen/margin_2"
            android:layout_marginTop="@dimen/margin_30"/>
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/margin_40"
            android:layout_marginBottom="@dimen/margin_30"
            android:layout_marginRight="@dimen/margin_12"
            android:gravity="center"
            android:orientation="horizontal">
            <CheckBox
                android:id="@+id/send_cb"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                style="@style/gift_term_condition"
                android:layout_marginLeft="@dimen/margin_5"
                android:text="@string/gift_terms_condition"/>
        </LinearLayout>

        <Button
            android:id="@+id/btn_send_gift"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            style="@style/gift_submit_btn"
            android:layout_marginBottom="@dimen/margin_10"
            android:layout_marginTop="@dimen/margin_20"/>
    </LinearLayout>

    </LinearLayout>

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

MyTab2 xml:

<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_marginTop="@dimen/margin_15"
        android:layout_marginLeft="@dimen/margin_15"
        android:layout_marginRight="@dimen/margin_15">

    <include layout="@layout/voucher_common_layout"/>

        <LinearLayout
            android:id="@+id/terms"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/margin_40"
            android:layout_marginRight="@dimen/margin_12"
            android:orientation="horizontal"
            android:gravity="center">
            <CheckBox
                android:id="@+id/buy_cb"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"  />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                style="@style/gift_term_condition"
                android:layout_marginLeft="@dimen/margin_5"
                android:text="@string/gift_terms_condition"/>
        </LinearLayout>
        <Button
            android:id="@+id/gift_buy_btn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            style="@style/gift_submit_btn"
            android:layout_marginTop="@dimen/margin_30"/>
    </LinearLayout>


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

1 Ответ

0 голосов
/ 12 ноября 2018

Ни одно из вышеприведенных решений не помогло мне, я сам нашел такое решение: надеюсь, оно кому-нибудь поможет: никаких изменений в коде табуляции. В основном 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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <com.emilsjolander.components.StickyScrollViewItems.StickyScrollView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true"
        android:layout_gravity="center">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <LinearLayout
                android:id="@+id/childImg_rl"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/gift_vouchr_header_img"
                android:adjustViewBounds="true"
                android:layout_gravity="center">
                <ImageView
                    android:id="@+id/imageview_gift"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@drawable/splash"/>
            </LinearLayout>

            <LinearLayout
                android:id="@+id/viewpager_ll"
                android:layout_width="match_parent"
                android:background="@color/lvb_divider_color"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:tag="sticky"
                android:adjustViewBounds="true"
                android:layout_gravity="center">

                <android.support.design.widget.TabLayout
                    android:id="@+id/common_tablayout"
                    style="@style/VoucherTabLayoutStyle"
                    android:layout_width="match_parent"
                    app:tabGravity="fill"
                    app:tabMode="fixed"
                    android:layout_height="@dimen/margin_48">
                </android.support.design.widget.TabLayout>


                <android.support.v4.view.ViewPager
                    android:id="@+id/common_viewpager"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">
                </android.support.v4.view.ViewPager>
            </LinearLayout>

        </LinearLayout>
    </com.emilsjolander.components.StickyScrollViewItems.StickyScrollView>
</LinearLayout>

Здесь начинается важная часть: прагматично установите высоту дочернего макета: D

private void setViewPagerandImageViewHeight(){
        DisplayMetrics displayMetrics = new DisplayMetrics();
        getActivity().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        int heightOfScreen = displayMetrics.heightPixels;
        child_img_ll.getLayoutParams().height= (int) (heightOfScreen*.30);// set imageview linearlayout to capture 30% of screen
        viewpager_ll.getLayoutParams().height=heightOfScreen;//while scrolling set the viewpager height to maximum ,intially it capture 70% of screen

    }
...