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

Posted

技术标签:

【中文标题】TextView垂直重力在ScrollView中不起作用【英文标题】:TextView Vertical Gravity not working in ScrollView 【发布时间】:2015-04-17 14:07:58 【问题描述】:

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

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

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

<?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_
android:layout_
tools:context=".MainActivity"
android:fillViewport="true" >

<RelativeLayout
    android:id="@+id/RelativeLayout"
    android:layout_
    android:layout_
    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_
        android:layout_
        android:gravity="center"
        android:text="@string/cup1"
        android:textColor="#21386f"
        android:textSize="24sp"
        android:textStyle="bold" />

    <Space
        android:id="@+id/Space1"
        android:layout_
        android:layout_
        android:layout_below="@id/cup1" />

    <ImageView
        android:id="@+id/canadienslogo"
        android:layout_
        android:layout_
        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_
        android:layout_
        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_
        android:layout_
        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_
        android:layout_
        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_
        android:layout_
        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 重力将被忽略。重力在表内似乎没有受到影响。

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

Issue

No Issue

注意“蒙特利尔加拿大人队”、“3 - 2”和“波特兰玫瑰花蕾”的文字是如何上移的。未应用 center_vertical 重力。

为了记录,我只在横向模式下截取屏幕截图,因为它会强制 ScrollView 启动并显示问题。如果我有更大的桌子,在纵向模式下也会出现同样的问题,所以这不是方向问题。我已经无数次地修改了我的代码,但似乎没有任何东西可以修复它。我确定这很简单,我只是想不通。它可能与高度的整体密度有关,因为这确实是 ScrollView 启动时唯一改变的东西。我在开发人员选项下启用了“显示布局边界”,实际容器很好,只是内容被推上去。奇怪的是,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_
android:layout_
tools:context=".MainActivity"
android:fillViewport="true" >

<LinearLayout
    android:id="@+id/LinearLayout1"
    android:layout_
    android:layout_
    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_
        android:layout_
        android:gravity="center"
        android:text="@string/cup1"
        android:textColor="#21386f"
        android:textSize="24sp"
        android:textStyle="bold" />

    <Space
        android:id="@+id/Space1"
        android:layout_
        android:layout_ />

    <LinearLayout
        android:id="@+id/LinearLayout2"
        android:layout_
        android:layout_
        android:orientation="horizontal" >

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

        <TextView
            android:id="@+id/team_canadiens"
            android:layout_
            android:layout_
            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_
            android:layout_
            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_
            android:layout_
            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_
            android:layout_
            android:contentDescription="@string/logo"
            android:src="@drawable/rosebudslogo" />

    </LinearLayout>

【问题讨论】:

【参考方案1】:

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

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"

【讨论】:

嗨 royB,感谢您的快速回复。我尝试了您的建议,但我不得不将布局从相对更改为线性。在 LinearLayout 中,我可以通过选择 wrap_content 为图像高度和 match_parent 为文本高度来匹配 TextViews 的高度与图像的高度。我现在遇到的问题是实际分数文本(3 - 2)不能再放置在宽度的绝对中心,因为线性视图中没有 center_horizo​​ntal 或 centerInParent。 没问题,如果我帮助了你请考虑接受我的回答 好吧,我删除了一些多余的填充并将 layout_weights 添加到 3 个 TextViews 中,我似乎得到了一些结果!谢谢 royB!

以上是关于TextView垂直重力在ScrollView中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Android中实现TextView垂直滚动,像跑马灯那样,但是垂直的

如何在 TextView 中水平和垂直居中文本?

无法垂直居中 textview 的文本

设置文本重心垂直在android编辑文本中不起作用

在textview中更改可绘制图像的重力

尽管没有使用Autolayout,但垂直滚动在UIScrollView和iOS7以及Xcode 5中不起作用