【问题标题】:viewpager inside linearlayout does not respect weight线性布局内的viewpager不尊重权重
【发布时间】:2019-04-05 15:18:44
【问题描述】:

我有这个 xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:orientation="vertical"

android:weightSum="1">

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="0">

    <android.support.v4.view.PagerTitleStrip
        android:id="@+id/pager_title_strip"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:background="#A00A0A"
        android:paddingBottom="4dp"
        android:paddingTop="4dp" />

</android.support.v4.view.ViewPager>

<Switch
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_weight="1"
    android:text="New Switch" />

</LinearLayout>

我的问题是 ViewPager 会填充父母的身高,无论我输入的设置或权重如何,并且看不到 Switch

我该如何解决这个问题?

【问题讨论】:

  • 将视图分页器的权重设置为 1
  • 谢谢,解决了!

标签: android android-layout android-viewpager


【解决方案1】:

如果您使用体重作为身高,那么您的身高应该是 0dp。试试这个答案。

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v4.view.ViewPager 
        android:id="@+id/pager"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

        <android.support.v4.view.PagerTitleStrip
            android:id="@+id/pager_title_strip"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="#A00A0A"
            android:paddingBottom="4dp"
            android:paddingTop="4dp" />

    </android.support.v4.view.ViewPager>

    <Switch
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="New Switch" />

    </LinearLayout>

【讨论】:

  • 这确实纠正了这个问题,我注意到正如“AndroidEnthusiast”所说,将权重改为“1”解决了这个问题
【解决方案2】:

如果您将ViewPager 的高度设置为wrap_content,则无关紧要。它的作用就像

android:layout_height="match_parent"

你必须设置某个dimensionlike

android:layout_height="150dp"

或者,如果你在 RelativeLayout 中使用它,你可以使用

android:layout_height="0dp"
android:layout_weight="1"

或者你必须设置你的开关alignParentBottom并在上面设置你的ViewPager

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true">

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/my_switch">

    <android.support.v4.view.PagerTitleStrip
        android:id="@+id/pager_title_strip"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#A00A0A"
        android:paddingBottom="4dp"
        android:paddingTop="4dp" 
        />

</android.support.v4.view.ViewPager>

<Switch
    android:id="@+id/my_switch"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_alignParentBottom="true"
    android:layout_weight="1"
    android:text="New Switch" />

</RelativeLayout>

【讨论】:

  • 我们不能使用 layout_alighParentBottom 在 LinearLayout 内部进行切换。 layout_alighParentBottom 是RelativeLayout 的一个属性。你的答案是错误的。
  • 是的,你是对的。我没有意识到。因为您在根视图中使用了 android:layout_alignParentBottom="true" android:layout_centerHorizo​​ntal="true。您必须将其更改为相对布局。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-26
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多