2013-01-01 28 views
38

Ho un testo arabo, quindi ho impostato la gravità a destra per iniziare il testo dal lato destro. Il testo inizia da subito. Ma un altro problema è che il testo inizia a essere visualizzato dalla parte superiore della pagina. Ma ho bisogno di centrare verticalmente il testo. Anche se ho provato diverse varianti, non riuscivo a centrarlo verticalmente.come allineare il testo verticalmente al centro in Android

Ecco l'esempio del mio file 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> 

Il problema è con la vista testo sopra.

Qui ho messo tutto il file 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> 

Qualcuno può mostrarmi dove ho fatto l'errore? Penso che il problema sia chiaro. Se non mi dici nei commenti.

Con la presente ho aggiunto il codice aggiornato dopo aver esaminato le risposte.

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

Ma io sono nella stessa situazione. Nessun testo è verticalmente centrato

risposta

92

i tuoi attributi TextView bisogno di essere qualcosa di simile,

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

Ora, Descrizione perché queste devono essere fatte,

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

Rende il vostro TextView a match_parent o fill_parent se Non vuoi essere come, match_parent devi dare alcuni valori specificati a layout_height in modo da ottenere spazio per la gravità centrale verticale. android:layout_width="match_parent" necessario perché allinea la tua TextView sul lato destro in modo da poter riconoscere rispetto al layout padre di TextView.

Ora, è circa android:gravity che rende il contenuto del vostro allineamento TextView. android:layout_gravity rende l'allineamento di TextView rispettato al suo layout principale.

Aggiornamento:

Come sotto commento dice utilizzare fill_parent invece di match_parent. (Problema in alcuni dispositivi.)

+1

Si prega di evitare l'uso di 'match_parent'.utilizzare fill_parent o wrap_content.Perché match _parent non supportava alcuni dispositivi. –

+0

Ho provato la tua risposta anche con match_parent e fill_parent dato che la mia app supporta versioni precedenti ma senza fortuna. Devo ancora affrontare lo stesso problema. Il testo è ancora mostrato in alto. – newday

+1

Solo per il debug e lo scopo del test puoi scrivere valori codificati sul tuo dispositivo 'Android: layout_height =" 200dp "' padre di TextView. – user370305

7

Prova a mettere android:gravity="center_vertical|right" all'interno LinearLayout genitore altra cosa come sei dentro RelativeLayout si può mettere dentro il vostro android:layout_centerInParent="true"scrollView.

+0

ho fatto ma c'è ancora lo stesso problema. – newday

+0

Risolto il problema per me, grazie! – Rob

16

basta usare come questo per fare di tutto per centrare

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

aggiornamento:

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

Aggiornato: Basta togliere MarginBottom dal TextView .. ti piace questo ..per la vostra 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

Sia Parent che Child View hanno lo stesso 'android: layout_height =" wrap_content "'. Quindi il cambiamento non si riflette. (L'utente non può riconoscere come la gravità sia impostata su 'center_vertical'). – user370305

+0

hai provato a modificare il tuo LinearLayout. Prova che funzionerà. aggiornando la risposta –

+0

apportare entrambe le modifiche a textView e LinearLayout –

0

In disposizione relativa è necessario specificare altezza TextView:

android:layout_height="100dp" 

o specificare le linee attribuiscono:

android:lines="3" 
+0

Spesso meglio di 'android: lines =" 3 "' è 'android: maxLines =" 3 "', fornendo un layout più flessibile mentre ancora risolvendo il 'bug' in questione – hardanger

5

Il problema è l'imbottitura del carattere sul TextView. Basta aggiungere al tuo textview:

android:includeFontPadding="false" 
+0

Avendo un 'TextView' con' android: layout_height = "24dp" 'e' android: textSize = "20dp" 'e' android: gravità = "center_vertical" 'Ho osservato che il testo era ancora allineato in basso. Android: includeFontPadding =" false "' risolto il problema! – foxanna

+0

Grazie! Non sapevo che il font Roboto avesse il padding ... – Phil

Problemi correlati