Android TextView'de metni sağa hizala


215

Bir var TextViewbaşvurumu. İçindeki metni sağa hizalamak istiyorum. Eklemeyi denedim:

android:gravity="right"

Ama bu benim için işe yaramıyor.

Neyi yanlış yapıyor olabilirim?

Yanıtlar:


193

Bunu yaptığınızı düşünüyorum: android:layout_width = "wrap_content"
Eğer durum buysa, bunu yapın:android:layout_width = "match_parent"


2
@Bishan dolgu alanın geri kalanını dolduracak, maç ebeveynin genişliğine eşit olacak
Troy Cosentino

11
Aslında, fill_parent ve match_parent aynı şeydir. Görünüşe göre fill_parent insanları şaşırttığı için ad match_parent olarak değiştirildi.
Edward Falk

158

Genel olarak, android:gravity="right"farklıdır android:layout_gravity="right".

Birincisi metnin kendisini Görünüm içindeki konumunu etkiler, bu nedenle sağa hizalanmasını istiyorsanız, layout_width=ya "fill_parent"da olmalıdır "match_parent".

İkincisi, Görünüm'ün üst öğesindeki konumunu etkiler, başka bir deyişle, nesnenin kendisini üst görünüm içinde hizalama (düzenleme kutusu veya metin görünümü).


83

Daha iyi çözüm, en basit olanıdır ve kod davranışınızda daha az değişiklik yapan çözümdür .

Bu sorunu yalnızca 2 Özellikler ile çözebilirseniz ne olur TextView?

LinearLayoutÖzelliklerinizi değiştirmek yerine, LinearLayoutçocukların davranışlarını değiştirebilir ?

Bu şekilde, LinearLayoutözellikleri ve davranışı değiştirmeniz gerekmez , yalnızca aşağıdaki iki özelliği hedefinize eklemeniz gerekir TextView:

android:gravity="right"
android:textAlignment="gravity"

Gelecekte başka bir soruna neden olma ve hedef babanızı değiştirme şansına sahip olmak yerine, yalnızca çözümünüzü çözmek için hedefinizi değiştirmek daha iyi ne olabilir? bunu düşün :)


Paket android kaynak 'textAlignment' için hiçbir kaynak tanımlayıcı bulunamadı diyerek bir hata alıyorum.
anu

Bir mülke erişim yaptığınızdan emin misiniz TextView? - Buradaki referanstan özelliği kontrol edebilirsiniz: developer.android.com/reference/android/view/…
Paulo Roberto Rosa

4
textAlignment, API 17 düzeyinde (Android 4.2) eklendi. Bunun çalışması için öykünücünüzün / cihazınızın 4.2+ çalıştırması gerekir.
thanhtd

Android 4.1.2'de bu textAlignment özelliğini kullanmaya çalıştım ve "textAlignment" özniteliği için kaynak tanımlayıcı bulunamadı "hatasını aldım. Bu hatanın cevabını burada stackoverflow.com/a/20176191/723507 buldum . 4.0.3'te nasıl kullanabilirsiniz?
thanhtd

20

android:layout_gravity, metin görünümünü üst düzene göre hizalamak için kullanılır. android:gravitymetni metin görünümü içinde hizalamak için kullanılır.

Metin görünümündeki metni sağa hizalamaya çalıştığınızdan emin misiniz veya üst görünümle ilgili olarak metin görünümünü sağa taşımak mı istiyorsunuz, yoksa her ikisini de elde etmeye mi çalışıyorsunuz?


Metin görünümü içindeki metni sağa hizalamaya çalışıyorum
Bishan

11

Aşağıdaki kod snippet'i:

android:textAlignment="textEnd"
android:layout_gravity="end"

benim için harika çalışıyor


11

Birisinin hala ihtiyacı varsa

android:gravity="end"

bu ne için?
gumuruh

LTR'de bu, metni sağa ve RTL'ye, sola hizalar
npk

8

android:layout_width="wrap_content"Eğer öyleyse kullanmadığınızdan emin olun, o zaman yerçekimini ayarlayamaz çünkü metnin hizalanması için yeterli alanınız yoktur. Bunun yerine kullanınandroid:layout_width="fill_parent"


7
android:gravity="right"

Temel olarak Doğrusal Düzen'de kullanılır, bu nedenle TextView veya EditText genişliğinizi

android:layout_width = "match_parent"

ve

Göreli Mizanpaj'da çalışırken,

android:layout_alignParentRight="true"

5

(LinearLayout) android:layout_width="match_parent"ve TextView'leri yapınandroid:layout_gravity="right"


5

İçinde ise RelativeLayoutkullanabilirsinizandroid:layout_toRightOf="@id/<id_of_desired_item>"

Veya

rightCihazın köşesine hizalamak istiyorsanız , yerandroid:layout_alignParentRight="true"


4

WEB kullanarak yerçekimi kavramını açıklayayım, çünkü birçok geliştirici bunun farkında.

android_layout_gravity davranacağını float:left|right|top|bottom

Oysa android_gravityolarak iştext_align:centre|left|right

Android şamandıra android_layout_gravity ve text_align: android_gravity olduğunu.

Ve android_layout_gravity ebeveyne göre uygulanır. burada android_gravity alt öğesi veya iç içeriği için geçerlidir.

Not android_gravity yalnızca Görünümü eşleştiğinde (ortalamak için boşluk olduğunda) çalışır.


3

Aşağıda benim için çalışıyor:

<TextView
    android:id="@+id/tv_username"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Sarah" />

<TextView
    android:id="@+id/tv_distance"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/tv_username"
    android:layout_alignParentEnd="true"
    android:layout_toEndOf="@+id/tv_username"
    android:text="San Marco"
    android:textAlignment="viewEnd" />

Lütfen ikinci TextView öğesinin android:layout_alignParentEndve android:textAlignmentayarlarına dikkat edin .


2

Kullanabilirsiniz:

    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"


2

Benim durumumda, ben kullanıyordum Relative Layouta içinemptyString

Bir saat boyunca bunun üzerinde mücadele ettikten sonra. Sadece bu benim için çalıştı:

android:layout_toRightOf="@id/welcome"
android:layout_toEndOf="@id/welcome"
android:layout_alignBaseline="@id/welcome"

layout_toRightOfya da layout_toEndOfher ikisi de işe yarıyor, ama daha iyi desteklemek için her ikisini de kullandım.

Daha açık hale getirmek için:

Yapmaya çalıştığım buydu:

resim açıklamasını buraya girin

Ve bu emülatörün çıktısıydı

resim açıklamasını buraya girin

Yerleşim:

<TextView
    android:id="@+id/welcome"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="16dp"
    android:layout_marginTop="16dp"
    android:text="Welcome "
    android:textSize="16sp" />
<TextView
    android:id="@+id/username"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@id/welcome"
    android:layout_toRightOf="@id/welcome"
    android:text="@string/emptyString"
    android:textSize="16sp" />

Dikkat:

  1. android:layout_width="wrap_content" İşler
  2. Gravity Kullanılmıyor

1

Ben de aynı sorunla karşı karşıya ve TextView düzen_genişliği wrap_content sahip olduğu gibi sorunun olduğunu düşündüm. Match_parent ve android olarak layout_width değerine sahip olmanız gerekir: gravity = "gravity"


1
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent">

  <TextView
    android:id="@+id/tct_postpone_hour"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:layout_gravity="center"
    android:gravity="center_vertical|center_horizontal"
    android:text="1"
    android:textSize="24dp" />
</RelativeLayout>

bir numarayı hem yatay hem de dikey olarak hizalar



0

Benim durumumda "layout_alignRight" özniteliğini kullandım, metinde onun:

android:layout_alignRight="@+id/myComponentId"

Biraz doğru kenar boşluğu eklemek istiyorsanız, "Layout_Margin Right" özelliğini örnek için "20dp" olarak ayarlayın, metinde:

android:layout_marginRight="20dp"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.