【问题标题】:Android Relative Layout is running off screenAndroid 相对布局在屏幕外运行
【发布时间】:2016-07-11 19:01:22
【问题描述】:

我有一个问题,相对布局在模拟器中似乎超出屏幕但在设计器中正确显示。

我在 RelativeLayout 中有一个 LinearLayout 和一个按钮。 LinearLayout 包含一些 TextView,然后是一个带有单选按钮的 ScrollView(要动态分配的数字)。

将 LinearLayout 和按钮放在 RelativeLayout 中,无论单选按钮的数量如何,按钮都会留在屏幕底部。这使我可以将按钮锚定到屏幕底部,将 LinearLayout 的底部锚定到按钮顶部。

在 Android Studio 设计器中,这非常有用!该按钮位于底部,如果收音机超出屏幕,您可以滚动它们。当我运行模拟器时,虽然屏幕在按钮之前被切断了!我已经在 Microsoft 和 Android(速度太慢)的模拟器中尝试过了,得到了相同的结果。

我在Android: Relative layout content goes below screen 发现了一个类似的问题,该问题明确指出将此行添加到我的按钮:

android:layout_marginBottom="@dimen/activity_horizontal_margin"

这使它部分回到屏幕上,但不是全部,该线程的其余部分是关于删除我想在这个用例中保留的 LinearLayout。似乎这里发生了更多事情。我究竟做错了什么?这是我的 XML:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:paddingBottom="16dp"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.complexityresolved.lifetracker.RadioInputsActivity$PlaceholderFragment"
    android:gravity="center_horizontal">

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.complexityresolved.lifetracker.RadioInputsActivity$PlaceholderFragment"
    android:orientation="vertical"
    android:layout_centerHorizontal="true"
    android:layout_above="@+id/radioInputsActivityDoneButton">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Text With Trait Name"
        android:id="@+id/RadioScreenTextViewTraitName"
        android:layout_gravity="center_horizontal"
        android:clickable="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="Text With Short Description"
        android:id="@+id/RadioScreenTextViewShortDescription"
        android:layout_gravity="center_horizontal"
        android:visibility="gone" />

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/scrollView">
        <RadioGroup
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <RadioButton android:id="@+id/radio_pirates"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="pirates"/>
            <RadioButton android:id="@+id/radio_ninjas"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="ninjas"/>
            <RadioButton android:id="@+id/radio_irates"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="pirates"/>
            <RadioButton android:id="@+id/radio_injas"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="ninjas"/>
            <RadioButton android:id="@+id/radio_rates"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="pirates"/>
            <RadioButton android:id="@+id/radio_njas"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="ninjas"/>
            <RadioButton android:id="@+id/radio_ates"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="pirates"/>
            <RadioButton android:id="@+id/radio_jas"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="ninjas"/>
            <RadioButton android:id="@+id/adio_pirates"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="pirates"/>
            <RadioButton android:id="@+id/adio_ninjas"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="ninjas"/>
            <RadioButton android:id="@+id/dio_pirates"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="pirates"/>
            <RadioButton android:id="@+id/dio_ninjas"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="ninjas"/>
            <RadioButton android:id="@+id/raio_pirates"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="pirates"/>
            <RadioButton android:id="@+id/raio_ninjas"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="ninjas"/>
            <RadioButton android:id="@+id/rao_pirates"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="pirates"/>
            <RadioButton android:id="@+id/rao_ninjas"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="ninjas"/>
        </RadioGroup>
    </ScrollView>

</LinearLayout>

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/radioInputsActivityDoneButton"
        android:id="@+id/radioInputsActivityDoneButton"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="@dimen/activity_horizontal_margin"/>
</RelativeLayout>

Picture in the designer

Picture in the emulator

另外,我的活动布局按要求:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.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:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="com.complexityresolved.lifetracker.RadioInputsActivity">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="@dimen/appbar_padding_top"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/AppTheme.PopupOverlay">

        </android.support.v7.widget.Toolbar>

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

</android.support.design.widget.CoordinatorLayout>

【问题讨论】:

  • 没有发现你的布局有问题,能不能在开发者选项中启用布局边界来发截图?
  • 请分享您的活动 xml
  • 如果您使用的是 TabbedActivity,请执行此操作,在 LinearLayout 中使用 AppBarLayout 和 ViewPager。

标签: android android-layout android-relativelayout


【解决方案1】:

试试这个:-

我已经测试了你,我看到了你上面提到的问题。 我已经更新了您在下面发布的代码。它运作良好。

在您的 Activity.xml 中

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.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:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"      tools:context="com.complexityresolved.lifetracker.RadioInputsActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <android.support.design.widget.AppBarLayout
            android:id="@+id/appbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingTop="@dimen/appbar_padding_top"
            android:theme="@style/AppTheme.AppBarOverlay">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary"
                app:layout_scrollFlags="scroll|enterAlways"
                app:popupTheme="@style/AppTheme.PopupOverlay">

            </android.support.v7.widget.Toolbar>

        </android.support.design.widget.AppBarLayout>

        <android.support.v4.view.ViewPager
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior" />

    </LinearLayout>
</android.support.design.widget.CoordinatorLayout>

【讨论】:

  • 我不确定我是否理解;我在我的问题中提到我已经找到了这篇文章,它只是部分帮助了。你是说我错过了什么吗?如果是这样,请更明确地说明我错过了什么;到目前为止我还没有得到它。
  • 我猜你正在使用 TabbedActivity,对吗?
  • 对不起,我想我误解了你的问题。
  • 你能提供输出屏幕截图吗?
  • CoordinatorLayout 是一个父视图,它有 2 个子视图(AppBarLayout 和 ViewPager)。您已将 viewpager 高度设置为 matchparent。所以它的高度将等于 CoordinatorLayout 的高度。例如:CoordinatorLayout 高度为 500dp,现在 viewpager 高度变为 500dp,AppBarLayout 高度为“x”。现在总高度是(500+x)。这就是按钮被隐藏的原因。现在在更新的 xml 中,CoordinatorLayout 只有一个孩子(LinearLayout)。 LinearLoyout 有 2 个孩子,所以它会根据他的父布局高度进行调整。
【解决方案2】:

你为什么不试试weightSum,试试下面的代码

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="5dp"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.complexityresolved.lifetracker.RadioInputsActivity$PlaceholderFragment">

    <LinearLayout xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerHorizontal="true"
        android:orientation="vertical"
        android:weightSum="10">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="0.5"
            android:orientation="vertical">

            <TextView
                android:id="@+id/RadioScreenTextViewTraitName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:clickable="true"
                android:text="Text With Trait Name"
                android:textAppearance="?android:attr/textAppearanceMedium" />

            <TextView
                android:id="@+id/RadioScreenTextViewShortDescription"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="Text With Short Description"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:visibility="visible" />

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="8.5"
            android:orientation="vertical">

            <ScrollView
                android:id="@+id/scrollView"
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <RadioGroup
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">

                    <RadioButton
                        android:id="@+id/radio_pirates"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="pirates" />

                    <RadioButton
                        android:id="@+id/radio_ninjas"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="ninjas" />

                    <RadioButton
                        android:id="@+id/radio_irates"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="pirates" />

                    <RadioButton
                        android:id="@+id/radio_injas"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="ninjas" />

                    <RadioButton
                        android:id="@+id/radio_rates"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="pirates" />

                    <RadioButton
                        android:id="@+id/radio_njas"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="ninjas" />

                    <RadioButton
                        android:id="@+id/radio_ates"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="pirates" />

                    <RadioButton
                        android:id="@+id/radio_jas"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="ninjas" />

                    <RadioButton
                        android:id="@+id/adio_pirates"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="pirates" />

                    <RadioButton
                        android:id="@+id/adio_ninjas"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="ninjas" />

                    <RadioButton
                        android:id="@+id/dio_pirates"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="pirates" />

                    <RadioButton
                        android:id="@+id/dio_ninjas"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="ninjas" />

                    <RadioButton
                        android:id="@+id/raio_pirates"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="pirates" />

                    <RadioButton
                        android:id="@+id/raio_ninjas"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="ninjas" />

                    <RadioButton
                        android:id="@+id/rao_pirates"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="pirates" />

                    <RadioButton
                        android:id="@+id/rao_ninjas"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="ninjas" />
                </RadioGroup>
            </ScrollView>

        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:layout_gravity="center"
            android:layout_weight="0.75">

            <Button
                android:id="@+id/radioInputsActivityDoneButton"
                style="?android:attr/buttonStyleSmall"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:text="radioInputsActivityDoneButton" />
        </LinearLayout>
    </LinearLayout>
</RelativeLayout>

希望这会有所帮助。

【讨论】:

  • 这是一个有趣的想法;将另一个也放入 LinearLayout 并加权。我目前不在我的开发计算机附近,但当我在的时候我肯定会尝试这个。与此同时,一个问题;加权方法不会根据屏幕尺寸调整大小吗?这不会导致按钮在某些屏幕上异常大或小吗?更一般地说,我仍然不确定为什么我采取的方法不起作用,所以我很担心这个问题可能会再次出现在这里。
  • 是的,它会根据屏幕大小调整大小,但它很容易维护以支持具有不同分辨率的所有设备。
  • 怎么样?如果它会调整大小,在我看来,在某些屏幕上,按钮会太小或大得离奇;有没有办法在你的解决方案中解决这个问题?
  • 因为一旦你给了重量,你就不必担心屏幕大小,或者你必须为一个屏幕制作三种不同的布局才能使其完美。
  • 如果您遇到任何问题,请告知@J.Natael
【解决方案3】:

我通过这个程序解决了这个问题

**使用相对布局

**首先根据边界设置边界项目(左侧项目使用 alignparentleft=true 和右侧项目 alignparentright=true)

**现在针对左右项目设置内部项目 查看我的代码和屏幕截图

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:paddingBottom="8dp"
    android:paddingTop="11dp"
    android:background="@color/white">
    <de.hdodenhof.circleimageview.CircleImageView xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/memberRankListViewImage"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:src="@drawable/fb_profile"
        app:border_color="#FF000000"
        android:layout_marginLeft="16dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/memberRankListViewText"
        android:layout_toRightOf="@+id/memberRankListViewImage"
        android:layout_toLeftOf="@+id/timeofnotifictioan"
        android:textSize="14sp"
        android:text="titlefsdfsdfdfgfhfghfghgfdgjnfdshdshjdfjfghdjlfgdjlfgjldfgnjfgnjfgnhjhfgnjhgnhjkklfdjsdklfjskdfjkfgfgkndfjksdkajsdkasj of job"
        android:textColor="@color/customBlackText"
        android:layout_marginLeft="16dp"
        />
    <TextView
        android:id="@+id/timeofnotifictioan"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp"
        android:text="2015/12/20"
        android:textColor="@color/year"
        android:layout_alignParentRight="true"
        android:layout_marginTop="38dp"
        android:layout_marginLeft="3dp"
        android:layout_marginRight="10dp"/>

</RelativeLayout>

这是截图

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多