2015-04-17 50 views
1

第一次在這裏發佈。對不起,如果這已被問到。我搜索了幾天,雖然有些帖子似乎相關,但他們似乎沒有解決我的確切問題。TextView垂直引力在ScrollView中不起作用

我有一個ScrollView內的RelativeLayout。在RelativeLayout中,我有一些TextViews。我已經將TextView gravities設置爲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_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" /> 

下面這個,還有一個空格,後面跟着一個TableLayout。如果表格太大而無法放在單個頁面上,則上面的center_vertical gravity會被忽略。表中的重力似乎沒有受到影響。

下面是該問題的兩個屏幕截圖。第一個有問題,第二個沒有(因爲所有的內容放在一張單頁)......

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_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> 

回答

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" 
+0

嗨royB,感謝您的快速回復。我嘗試了你的建議,但我不得不將我的佈局從「相對」改爲「線性」。在LinearLayout中,我可以通過選擇圖像高度的wrap_content和文本高度的match_parent來匹配TextView的高度和圖像的高度。我現在遇到的問題是實際得分文本(3 - 2)不能再放在寬度的絕對中心,因爲在線性視圖中沒有center_horizo​​ntal或centerInParent。 – Phhoenyxx

+0

沒問題,如果我幫過你,請考慮接受我的回答 – royB

+0

好的,我刪除了一些過多的填充,並向3個TextView添加了layout_weights,而且我似乎正在進入某個地方!謝謝royB! – Phhoenyxx