TextView 垂直重力在 ScrollView 中不起作用
TextView Vertical Gravity not working in ScrollView
第一次在这里发帖。抱歉,如果已经有人问过这个问题。我搜索了几天,虽然有些帖子似乎相关,但它们似乎并没有解决我的确切问题。
我在 ScrollView 中有一个 RelativeLayout。在 RelativeLayout 中,我有一些 TextView。我已将 TextView 重力设置为 center_vertical。当页面内容适合单个页面而无需激活 ScrollView 时,一切正常。但是,只要内容超出页面并且 ScrollView 被激活,center_vertical 引力就会被忽略。有趣的是,left/right (start/end) 引力没有被忽略,只有 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_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。如果 table 太大而无法放在单个页面上,则上面的 center_vertical gravity 将被忽略。 table.
内的重力似乎没有受到影响
这里有两个问题的截图。第一个有问题,第二个没有(因为所有内容都放在一个页面上)...
注意文本 "Montreal Canadiens"“3 - 2”和 "Portland Rosebuds" 是如何向上移动的。 center_vertical 没有应用重力。
郑重声明,我只在横向模式下截图,因为它会强制 ScrollView 启动并显示问题。如果我有更大的 tables,同样的问题也会出现在纵向模式下,所以这不是方向问题。我已经无数次修改我的代码,但似乎没有什么可以修复它。我敢肯定这很简单,我就是想不通。它可能与高度的整体密度有关,因为这实际上是 ScrollView 启动时唯一改变的东西。我在开发人员选项下启用了 "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>
不能说它会解决你的问题,但你有一些怪癖:
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"
第一次在这里发帖。抱歉,如果已经有人问过这个问题。我搜索了几天,虽然有些帖子似乎相关,但它们似乎并没有解决我的确切问题。
我在 ScrollView 中有一个 RelativeLayout。在 RelativeLayout 中,我有一些 TextView。我已将 TextView 重力设置为 center_vertical。当页面内容适合单个页面而无需激活 ScrollView 时,一切正常。但是,只要内容超出页面并且 ScrollView 被激活,center_vertical 引力就会被忽略。有趣的是,left/right (start/end) 引力没有被忽略,只有 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_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。如果 table 太大而无法放在单个页面上,则上面的 center_vertical gravity 将被忽略。 table.
内的重力似乎没有受到影响这里有两个问题的截图。第一个有问题,第二个没有(因为所有内容都放在一个页面上)...
注意文本 "Montreal Canadiens"“3 - 2”和 "Portland Rosebuds" 是如何向上移动的。 center_vertical 没有应用重力。
郑重声明,我只在横向模式下截图,因为它会强制 ScrollView 启动并显示问题。如果我有更大的 tables,同样的问题也会出现在纵向模式下,所以这不是方向问题。我已经无数次修改我的代码,但似乎没有什么可以修复它。我敢肯定这很简单,我就是想不通。它可能与高度的整体密度有关,因为这实际上是 ScrollView 启动时唯一改变的东西。我在开发人员选项下启用了 "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>
不能说它会解决你的问题,但你有一些怪癖:
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"