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"
您不能同时对齐bottom
和top
。如果你想匹配 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_horizontal 或 centerInParent。 没问题,如果我帮助了你请考虑接受我的回答 好吧,我删除了一些多余的填充并将 layout_weights 添加到 3 个 TextViews 中,我似乎得到了一些结果!谢谢 royB!以上是关于TextView垂直重力在ScrollView中不起作用的主要内容,如果未能解决你的问题,请参考以下文章