จัดข้อความชิดขวาใน Android TextView


215

ฉันมีTextViewในใบสมัครของฉัน ฉันต้องการจัดแนวข้อความในด้านขวา ฉันพยายามเพิ่ม:

android:gravity="right"

แต่มันไม่ได้ผลสำหรับฉัน

ฉันจะทำอะไรผิด

คำตอบ:


193

ฉันคิดว่าคุณกำลังทำสิ่งนี้: android:layout_width = "wrap_content"
ในกรณีนี้ให้ทำสิ่งนี้:android:layout_width = "match_parent"


2
@Bishan Fill จะเติมเต็มส่วนที่เหลือของพื้นที่การจับคู่จะตั้งค่าให้เท่ากับความกว้างของผู้ปกครอง
Troy Cosentino

11
ที่จริง fill_parent และ match_parent เป็นสิ่งเดียวกัน ชื่อถูกเปลี่ยนเป็น match_parent เพราะเห็นได้ชัดว่า fill_parent ทำให้ผู้คนสับสน
Edward Falk

158

โดยทั่วไปจะแตกต่างจากandroid:gravity="right"android:layout_gravity="right"

คนแรกที่ส่งผลกระทบต่อตำแหน่งของข้อความตัวเองในมุมมองดังนั้นหากคุณต้องการที่จะจัดชิดขวาแล้วlayout_width=ควรจะเป็นอย่างใดอย่างหนึ่งหรือ"fill_parent""match_parent"

ส่วนที่สองส่งผลต่อตำแหน่งมุมมองภายในพาเรนต์กล่าวอีกนัยหนึ่งคือการจัดแนววัตถุเอง (กล่องแก้ไขหรือมุมมองข้อความ) ภายในมุมมองพาเรนต์


83

ทางออกที่ดีกว่านั้นคือทางออกที่ง่ายที่สุดและเป็นวิธีที่แก้ไขโค้ดพฤติกรรมของคุณได้น้อยลงวิธีการแก้ปัญหาที่ดีคือคนที่เป็นที่ง่ายที่สุดและเป็นคนที่ไม่ปรับเปลี่ยนพฤติกรรมที่น้อยลงในรหัสของคุณ

จะทำอย่างไรถ้าคุณสามารถแก้ปัญหานี้ได้ด้วย 2 คุณสมบัติบนของคุณ TextView ?

แทนที่จะต้องเปลี่ยนLinearLayoutคุณสมบัติของคุณที่อาจเปลี่ยนพฤติกรรมของLinearLayoutเด็กได้

ด้วยวิธีนี้คุณไม่จำเป็นต้องเปลี่ยนLinearLayoutคุณสมบัติและลักษณะการทำงานคุณเพียงแค่เพิ่มคุณสมบัติสองอย่างต่อไปนี้ในเป้าหมายของคุณTextView:

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

อะไรจะดีไปกว่าการเปลี่ยนเฉพาะเป้าหมายของคุณเพื่อแก้ปัญหาของคุณแทนที่จะมีโอกาสทำให้เกิดปัญหาอื่นในอนาคตโดยปรับเปลี่ยนพ่อเป้าหมายของคุณ ลองคิดดู :)


ฉันพบข้อผิดพลาดว่าไม่พบตัวระบุทรัพยากรสำหรับทรัพยากร 'textAlignment' ในแพ็คเกจ android
anu

คุณแน่ใจหรือไม่ว่าคุณกำลังประมวลผลTextViewคุณสมบัติ? - คุณสามารถตรวจสอบทรัพย์สินได้จากการอ้างอิงที่นี่: developer.android.com/reference/android/view/
......

4
textAlignment ถูกเพิ่มใน API ระดับ 17 (Android 4.2) ตัวจำลอง / อุปกรณ์ของคุณจะต้องใช้งาน 4.2+ เพื่อให้ใช้งานได้
thanhtd

ฉันพยายามใช้คุณสมบัติการจัดตำแหน่งข้อความใน Android 4.1.2 และได้รับข้อผิดพลาด "ไม่พบตัวระบุทรัพยากรสำหรับแอตทริบิวต์ 'textAlignment'" ผมพบคำตอบสำหรับข้อผิดพลาดนี้ที่นี่stackoverflow.com/a/20176191/723507 คุณจะใช้มันใน 4.0.3 ได้อย่างไร?
thanhtd

20

android:layout_gravityถูกใช้เพื่อจัดแนวมุมมองข้อความที่เกี่ยวข้องกับเค้าโครงหลัก android:gravityใช้เพื่อจัดแนวข้อความภายในมุมมองข้อความ

คุณแน่ใจหรือไม่ว่าคุณกำลังพยายามจัดแนวข้อความภายในมุมมองข้อความไปทางขวาหรือคุณต้องการย้ายมุมมองข้อความไปทางขวาตามรูปแบบของผู้ปกครองหรือคุณพยายามที่จะทำให้ทั้งคู่ประสบความสำเร็จ


ฉันพยายามที่จะจัดข้อความที่อยู่ภายในมุมมองข้อความไปทางขวา
Bishan

11

ข้อมูลโค้ดต่อไปนี้:

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

ใช้งานได้ดีสำหรับฉัน


11

ในกรณีที่บางคนยังต้องการ

android:gravity="end"

เพื่ออะไร
gumuruh

ใน LTR สิ่งนี้จัดเรียงข้อความไปทางขวาและใน RTL ไปทางซ้าย
npk

8

ตรวจสอบให้แน่ใจว่าคุณไม่ได้ใช้android:layout_width="wrap_content"ถ้าเป็นเช่นนั้นจะไม่สามารถกำหนดแรงโน้มถ่วงได้เนื่องจากคุณมีพื้นที่ไม่เพียงพอสำหรับข้อความที่จะจัดตำแหน่ง ใช้แทนandroid:layout_width="fill_parent"


7
android:gravity="right"

มันถูกใช้โดยทั่วไปใน Linear Layout ดังนั้นคุณต้องตั้งค่าความกว้างของ TextView หรือ EditText เป็น

android:layout_width = "match_parent"

และ

เมื่อคุณทำงานในเค้าโครงสัมพันธ์ให้ใช้

android:layout_alignParentRight="true"


5

ถ้าอยู่ในRelativeLayoutคุณสามารถใช้android:layout_toRightOf="@id/<id_of_desired_item>"

หรือ

หากคุณต้องการจัดตำแหน่งrightมุมของอุปกรณ์สถานที่android:layout_alignParentRight="true"


4

ให้ฉันอธิบายแนวคิดแรงโน้มถ่วงโดยใช้เว็บเพราะผู้พัฒนาจำนวนมากรู้ตัว

android_layout_gravity พฤติกรรม float:left|right|top|bottom

ในขณะที่android_gravityทำงานเป็นtext_align:centre|left|right

ใน Android float คือ android_layout_gravity และ text_align: คือ android_gravity

และ android_layout_gravity ใช้เทียบกับผู้ปกครอง โดยที่ android_gravity ใช้กับเนื้อหาย่อยหรือเนื้อหาภายใน

หมายเหตุ android_gravity ใช้งานได้เฉพาะเมื่อมุมมองเป็นแบบ match_parent (เมื่อมีพื้นที่ว่างตรงกลาง)


3

ทำงานด้านล่างสำหรับฉัน:

<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" />

โปรดทราบandroid:layout_alignParentEndและandroid:textAlignmentการตั้งค่าของ TextView ที่สอง




2

ในกรณีของฉันฉันใช้Relative LayoutสำหรับemptyString

หลังจากดิ้นรนกับสิ่งนี้เป็นเวลาหนึ่งชั่วโมง สิ่งนี้ใช้ได้สำหรับฉันเท่านั้น:

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

layout_toRightOf หรือ layout_toEndOfทำงานได้ทั้งสองอย่าง แต่เพื่อสนับสนุนดีกว่าฉันใช้ทั้งสองอย่าง

วิธีทำให้ชัดเจนยิ่งขึ้น:

นี่คือสิ่งที่ฉันพยายามทำ:

ป้อนคำอธิบายรูปภาพที่นี่

และนี่คือเอาท์พุทของอีมูเลเตอร์

ป้อนคำอธิบายรูปภาพที่นี่

เค้าโครง:

<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" />

สังเกตว่า:

  1. android:layout_width="wrap_content" โรงงาน
  2. Gravity ไม่ได้ใช้

1

ฉันยังประสบปัญหาเดียวกันและคิดว่าปัญหาเกิดขึ้นเนื่องจาก layout_width ของ TextView นั้นมี wrap_content คุณต้องมี layout_width เป็น match_parent และ android: 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>

ทำให้การจัดตำแหน่งหมายเลขหนึ่งอยู่ตรงกลางทั้งแนวนอนและแนวตั้ง



0

ฉันได้ใช้คุณลักษณะ "layout_alignRight" ในกรณีของฉันในข้อความมัน:

android:layout_alignRight="@+id/myComponentId"

หากคุณต้องการเพิ่มระยะห่างที่ถูกต้องเพียงตั้งค่าแอตทริบิวต์ "Layout_Margin Right" เป็น "20dp" สำหรับตัวอย่างในข้อความ:

android:layout_marginRight="20dp"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.