TextView垂直重力在ScrollView中不起作用

时间:2015-04-17 14:07:59

标签: android android-layout uiscrollview

第一次在这里发帖。对不起,如果已经问过这个问题。我搜索了几天,虽然有些帖子看似相关,但它们似乎并没有解决我的确切问题。

我在ScrollView中有一个RelativeLayout。在RelativeLayout中,我有一些TextViews。我已将TextView重力设置为center_vertical。当页面内容适合单个页面而不需要激活ScrollView时,一切正常。但是,只要内容超出页面并且ScrollView被激活,就会忽略center_vertical gravity。有趣的是,左/右(开始/结束)的重力不会被忽略,只有中心的重力。

这是我的代码的主要部分:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/ScrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:fillViewport="true" >

<RelativeLayout
    android:id="@+id/RelativeLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin" >

    <TextView
        android:id="@+id/cup1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="@string/cup1"
        android:textColor="#21386f"
        android:textSize="24sp"
        android:textStyle="bold" />

    <Space
        android:id="@+id/Space1"
        android:layout_width="match_parent"
        android:layout_height="24dp"
        android:layout_below="@id/cup1" />

    <ImageView
        android:id="@+id/canadienslogo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@id/Space1"
        android:contentDescription="@string/logo"
        android:src="@drawable/canadienslogo" />

    <TextView
        android:id="@+id/score1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/canadienslogo"
        android:layout_alignTop="@id/canadienslogo"
        android:layout_below="@id/Space1"
        android:layout_centerInParent="true"
        android:gravity="center_vertical|center_horizontal"
        android:paddingLeft="16sp"
        android:paddingRight="16sp"
        android:text="@string/score1"
        android:textSize="24sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/team_canadiens"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/canadienslogo"
        android:layout_alignTop="@id/canadienslogo"
        android:layout_toEndOf="@id/canadienslogo"
        android:layout_toLeftOf="@id/score1"
        android:layout_toRightOf="@id/canadienslogo"
        android:layout_toStartOf="@id/score1"
        android:gravity="center_vertical|start"
        android:paddingLeft="2sp"
        android:paddingRight="2sp"
        android:text="@string/team_canadiens"
        android:textSize="14sp"
        android:textStyle="bold" />

    <ImageView
        android:id="@+id/rosebudslogo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_below="@id/Space1"
        android:contentDescription="@string/logo"
        android:src="@drawable/rosebudslogo" />

    <TextView
        android:id="@+id/team_rosebuds"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/rosebudslogo"
        android:layout_alignTop="@id/rosebudslogo"
        android:layout_toEndOf="@id/score1"
        android:layout_toLeftOf="@id/rosebudslogo"
        android:layout_toRightOf="@id/score1"
        android:layout_toStartOf="@id/rosebudslogo"
        android:gravity="center_vertical|end"
        android:paddingLeft="2sp"
        android:paddingRight="2sp"
        android:text="@string/team_rosebuds"
        android:textSize="14sp"
        android:textStyle="bold" />

在此之下,还有另一个Space,后跟TableLayout。如果表太大而无法放在单个页面上,则忽略上面的center_vertical gravity。表中的重力似乎没有受到影响。

以下是该问题的两个屏幕截图。第一个有问题,第二个没有(因为所有内容都适合单个页面)......

Issue

No Issue

请注意“蒙特利尔加拿大人队”“3 - 2”和“波特兰玫瑰花蕾”的文字是如何提升的。没有应用center_vertical引力。

为了记录,我只在横向模式下截取屏幕截图,因为它会强制ScrollView启动并显示问题。如果我要有更大的表格,同样的问题也会出现在纵向模式中,所以这不是一个方向问题。我已经无数次修改了我的代码,但似乎没有什么能解决它。我确信它很简单,我无法弄明白。它可能与高度的整体密度有关,因为当ScrollView启动时,这确实是唯一的变化。我在Developer Options下启用了“Show layout bounds”,实际的容器很好,它只是内容被推高了。奇怪的是,Eclipse和Android Studio都没有在设计模式中显示问题。 FWIW,我在我的Galaxy Nexus和Galaxy Tab 3 Lite上进行了测试,两者都发生了同样的事情。

希望你们其中一人可以让我看起来很愚蠢并立即解决。

提前感谢所有帮助。

此致

编辑:新的工作代码......

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/ScrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:fillViewport="true" >

<LinearLayout
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin" >

    <TextView
        android:id="@+id/cup1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="@string/cup1"
        android:textColor="#21386f"
        android:textSize="24sp"
        android:textStyle="bold" />

    <Space
        android:id="@+id/Space1"
        android:layout_width="match_parent"
        android:layout_height="24dp" />

    <LinearLayout
        android:id="@+id/LinearLayout2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <ImageView
            android:id="@+id/canadienslogo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:contentDescription="@string/logo"
            android:src="@drawable/canadienslogo" />

        <TextView
            android:id="@+id/team_canadiens"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center_vertical|start"
            android:paddingLeft="2sp"
            android:paddingRight="2sp"
            android:text="@string/team_canadiens"
            android:textSize="14sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/score1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center_vertical|center_horizontal"
            android:text="@string/score1"
            android:textSize="24sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/team_rosebuds"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center_vertical|end"
            android:paddingLeft="2sp"
            android:paddingRight="2sp"
            android:text="@string/team_rosebuds"
            android:textSize="14sp"
            android:textStyle="bold" />

        <ImageView
            android:id="@+id/rosebudslogo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:contentDescription="@string/logo"
            android:src="@drawable/rosebudslogo" />

    </LinearLayout>

1 个答案:

答案 0 :(得分:0)

不能说它会解决你的问题,但你有一些怪癖:

android:id="@+id/score1"
android:layout_alignBottom="@id/canadienslogo"
android:layout_alignTop="@id/canadienslogo"

您无法将bottomtop对齐。如果你想匹配2个视图的高度 - 然后给它们一个高度

具有相同问题的另一个布局:

android:id="@+id/team_canadiens"
android:layout_alignBottom="@id/canadienslogo"
android:layout_alignTop="@id/canadienslogo"
android:layout_toEndOf="@id/canadienslogo"