2013-01-01 80 views
38

我有阿拉伯語文本,因此我將重力設置爲正確以便從右側開始文本。文本從現在開始。但另一個問題是文本開始從頁面頂部渲染。但我需要垂直居中文本。 雖然我嘗試了幾個變化,但我無法使其垂直居中。如何在Android中對齊文本垂直中心

這是我的xml文件的示例。

<LinearLayout 
      android:id="@+id/linearLayout5" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:gravity="right" 
      android:orientation="vertical" > 

      <TextView 
       android:id="@+id/textView2" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_vertical" 
       android:layout_marginBottom="23dp" 
       android:gravity="right" 
       android:padding="@dimen/padding_maintextview" 
       android:text="@string/text" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:textSize="20sp" /> 
     </LinearLayout> 

問題出在上面的textview。

這裏我已經把整個xml文件。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/page1background" 
    android:paddingRight="@dimen/padding_large" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="196dp" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:gravity="center_horizontal" 
     android:paddingTop="@dimen/padding_Title_Top" 
     android:text="@string/text" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textSize="20sp" /> 

    <LinearLayout 
     android:id="@+id/linearLayout1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/textView1" 
     android:gravity="center_horizontal" 
     android:orientation="vertical" > 

     <View 
      android:id="@+id/view1" 
      android:layout_width="fill_parent" 
      android:layout_height="5dp" /> 
    </LinearLayout> 

    <ScrollView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_above="@id/linearLayout2" 
     android:layout_below="@id/linearLayout1" 
     android:layout_gravity="center" 
     android:padding="@dimen/padding_maintextview" > 

     <LinearLayout 
      android:id="@+id/linearLayout5" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:gravity="right" 
      android:orientation="vertical" > 

      <TextView 
       android:id="@+id/textView2" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_vertical" 
       android:layout_marginBottom="23dp" 
       android:gravity="right" 
       android:padding="@dimen/padding_maintextview" 
       android:text="@string/text" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:textSize="20sp" /> 
     </LinearLayout> 
    </ScrollView> 

    <LinearLayout 
     android:id="@+id/linearLayout2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" > 

     <View 
      android:id="@+id/view2" 
      android:layout_width="fill_parent" 
      android:layout_height="100dp" /> 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/linearLayout3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" > 

     <ImageButton 
      android:id="@+id/back_arrow" 
      android:layout_width="0dip" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="30dp" 
      android:layout_marginRight="45dp" 
      android:layout_weight=".5" 
      android:background="@drawable/backbut" 
      android:contentDescription="@string/Description" 
      android:onClick="onClickBtn" 
      android:src="@drawable/backarrowpress" /> 

     <ImageButton 
      android:id="@+id/copyButton" 
      android:layout_width="0dip" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="45dp" 
      android:layout_weight=".5" 
      android:background="@drawable/copy" 
      android:contentDescription="@string/Description" 
      android:onClick="onClickBtn" /> 
    </LinearLayout> 

</RelativeLayout> 

有人可以告訴我我犯了什麼錯誤嗎?我認爲問題很明顯。如果不在評論中告訴我。

因此,我在查看您的答案後附加了更新後的代碼。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/page1background" 
    android:paddingRight="@dimen/padding_large" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="196dp" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:gravity="center_horizontal" 
     android:paddingTop="@dimen/padding_Title_Top" 
     android:text="@string/text" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textSize="20sp" /> 

    <LinearLayout 
     android:id="@+id/linearLayout1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/textView1" 
     android:gravity="center_horizontal" 
     android:orientation="vertical" > 

     <View 
      android:id="@+id/view1" 
      android:layout_width="fill_parent" 
      android:layout_height="5dp" /> 
    </LinearLayout> 

    <ScrollView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_above="@id/linearLayout2" 
     android:layout_below="@id/linearLayout1" 
     android:layout_gravity="center" 
     android:layout_centerInParent="true" 
     android:padding="@dimen/padding_maintextview" > 

     <LinearLayout 
      android:id="@+id/linearLayout5" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:gravity="right" 
      android:orientation="vertical" > 

      <TextView 
       android:id="@+id/textView2" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_gravity="center_vertical" 
       android:layout_marginBottom="23dp" 
       android:gravity="center_vertical|right" 
       android:padding="@dimen/padding_maintextview" 
       android:text="@string/text" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:textSize="20sp" /> 
     </LinearLayout> 
    </ScrollView> 

    <LinearLayout 
     android:id="@+id/linearLayout2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" > 

     <View 
      android:id="@+id/view2" 
      android:layout_width="fill_parent" 
      android:layout_height="100dp" /> 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/linearLayout3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" > 

     <ImageButton 
      android:id="@+id/back_arrow" 
      android:layout_width="0dip" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="30dp" 
      android:layout_marginRight="45dp" 
      android:layout_weight=".5" 
      android:background="@drawable/backbut" 
      android:contentDescription="@string/Description" 
      android:onClick="onClickBtn" 
      android:src="@drawable/backarrowpress" /> 

     <ImageButton 
      android:id="@+id/copyButton" 
      android:layout_width="0dip" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="45dp" 
      android:layout_weight=".5" 
      android:background="@drawable/copy" 
      android:contentDescription="@string/Description" 
      android:onClick="onClickBtn" /> 
    </LinearLayout> 

</RelativeLayout> 

但是我處於同樣的情況。沒有文字垂直居中

回答

92

你的TextView屬性必須是這樣的,

<TextView ... 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center_vertical|right" ../> 

現在,說明爲什麼這些需要做的,

android:layout_width="match_parent" 
android:layout_height="match_parent" 

讓你的TextView到match_parentfill_parent如果你不想這樣,match_parent你必須給layout_height一些指定的值,所以它得到垂直中心重力的空間。 android:layout_width="match_parent"是必要的,因爲它將您的TextView對齊到右側,因此您可以識別對TextView的父佈局的尊重。

現在,它的約android:gravity它使您的TextView的內容對齊。 android:layout_gravity使TextView遵循其父佈局的對齊。

更新:

如下評論說,用fill_parent代替match_parent。 (在某些設備中存在問題)

+1

請避免使用'match_parent'。請使用fill_parent或wrap_content代替。因爲匹配_parent在某些設備中不支持。 –

+0

我試着用match_parent和fill_parent來回答你的問題,因爲我的應用程序支持舊版本,但沒有運氣。我仍然面臨同樣的問題。文字仍然顯示在最上面。 – newday

+1

僅用於調試和測試目的,您可以在您的LinearLayout'android:layout_height =「200dp」'TextView的父級編寫硬編碼值。 – user370305

7

嘗試將android:gravity="center_vertical|right"放在父LinearLayout中,因爲您在RelativeLayout內部,因此可以將android:layout_centerInParent="true"置於scrollView的內部。

+0

我做了,但仍然存在相同的問題。 – newday

+0

修復了我的問題,謝謝! – Rob

16

只是用這樣的做任何事情居中

android:layout_gravity="center" 
android:gravity="center" 

更新:

android:layout_gravity="center|right" 
android:gravity="center|right" 

更新時間:剛剛從你的TextView刪除MarginBottom ..做這樣的..爲您的TextView

<LinearLayout 
     android:id="@+id/linearLayout5" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" > 

     <TextView 
      android:id="@+id/textView2" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:gravity="center|right" 
      android:text="hello" 
      android:textSize="20dp" /> 
    </LinearLayout> 
+0

父視圖和子視圖都具有相同的'android:layout_height =「wrap_content」'。所以這個變化並沒有體現出來。 (由於重力被設置爲'center_vertical',用戶無法識別)。 – user370305

+0

您是否嘗試對您的LinearLayout進行更改?嘗試它會工作。更新答案 –

+0

同時對textView和LinearLayout –

0

在相對佈局,你需要指定的TextView高度:

android:layout_height="100dp" 

或指定行屬性:

android:lines="3" 
+0

通常比'android:lines =「更好3「'是'android:maxLines =」3「',提供了更靈活的佈局,同時仍然修復了有問題的'bug'。 – hardanger

5

的問題是在TextView的字體的填充。只需添加到您的文本視圖:

android:includeFontPadding="false" 
+0

擁有帶'android:layout_height =」24dp「'和'android:textSize'的TextView =「20dp」'和'android:gravity =「center_vertical」'我發現文本仍然對齊底部。'android:includeFontPadding =「false」'解決了我的問題! – foxanna

+0

謝謝!我不知道Roboto字體有填充... – Phil