Widget yatay doğrusal düzen Android doğru hizalamak için?


206

Bu kullanıyorum kodu ve çalışmıyor:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:orientation="horizontal">

    <TextView android:text="TextView" android:id="@+id/textView1"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:gravity="right">
    </TextView>

</LinearLayout>

Yanıtlar:


420

Doğru görmek istediğiniz öğeden önce yatayın Viewiçine boş eklemeye çalışın LinearLayout, örneğin:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <View
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_weight="1" />                

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

12
Bu çalışıyor! Ama kimse nedenini açıklayabilir? Tamamen anlayamadım.
GMsoF

29
Boş Görünüm, maksimum yer kaplamaya çalışıyor ve düğmeye yer bırakıyor.
alcsan

14
Şimdiye kadar, solda birkaç düğme ve sağda bir son düğme olmasını denemek için benim için çalışan tek şey bu oldu. Ama bu bana bir hile gibi geliyor. Bunu yapmanın "doğru" bir yolu var mı?
IcedDante

8
Bu harika! Ama neden yerçekimi = "doğru" en başından beri bu şekilde çalışmıyor? Neden bu diğer görüşten yardıma ihtiyacı var? Ve ekstra görüş olmadan değilse, nasıl "doğru"?
14'te afrish

1
Bu, ızgara benzeri bir düzende çalışmaz - boş alan yoktur. Şerif el Hatib'ın çözümü işe yarıyor.
cdonner

119

Eğer her şeyin doğru olmasını istemiyorsanız, LinearLayout'un yerçekimini "right" olarak değiştirmeyin.

Deneyin:

  1. Değişim TextView'un en genişliği içinfill_parent
  2. TextView'ın yerçekimini şu şekilde değiştirin:right

Kod:

    <TextView 
              android:text="TextView" 
              android:id="@+id/textView1"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"   
              android:gravity="right">
    </TextView>

1
bunun için teşekkürler - beni fırlatan
dolgu_eklemesinin

2
Doğrusal düzen bunu başarmak için bile tasarlanmış mı? Bunu başarmak için göreceli mizanpaj kullanılmamalıdır mı? Bu çözüm bir hack değil mi?
user2635088

bir LinearLayout'ta birden fazla TextView denetiminiz varsa bu çalışmaz. @Alcsan
Felix

Bu kabul edilen cevap olmalı. Bu yaklaşım herhangi bir ek görünüm kullanmaz ve daha da önemlisi, performansı önemli ölçüde azaltan layout_weight kullanmaz.
Sermilion

android:layout_weight = "1"yan yana android:gravity="right", hile yapmalı.
Vassilis

63

Alcsan'ın cevabına ek olarak, SpaceAPI 14'ten bu yana (Android 4.0 ICE_CREAM_SANDWICH) buradaki belgeyi kullanabilirsiniz .

Boşluk, genel amaçlı düzenlerde bileşenler arasında boşluklar oluşturmak için kullanılabilecek hafif bir Görünüm alt sınıfıdır.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:orientation="horizontal" >

    <Space
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_weight="1" />

    <TextView
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:text="TextView"
        android:gravity="right" />

</LinearLayout>

14 yaşın altındaki API düzeylerini destekleyen uygulamalar için, android.support.v4.widget.SpaceAndroid Destek Kütüphanesi r22.1.0'dan beri vardır .


Önemli, layout_weight = "1" ayarlamanız gerekir
code4j

Mükemmel çalışıyor! Her öğenin genişliğini korur.
phatmann

Bu çalışıyor. Vay canına, Android'in çirkinliği beni şaşırtmaktan asla vazgeçmiyor
Chris Neve

31

İle Lineer Düzeni

<LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/select_car_book_tabbar"
        android:gravity="right" >

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:src="@drawable/my_booking_icon" />
    </LinearLayout>

resim açıklamasını buraya girin

ile FrameLayout

<FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/select_car_book_tabbar">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical|right"
            android:src="@drawable/my_booking_icon" />
    </FrameLayout>

ile RelativeLayout

<RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/select_car_book_tabbar">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerInParent="true"
            android:src="@drawable/my_booking_icon" />
    </RelativeLayout>

22

görünümü ayarlamak layout_weight="1"hile yapardı.!

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<TextView
    android:id="@+id/textView1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1" />

<RadioButton
    android:id="@+id/radioButton1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>


3
Böyle basit bir çözüm +1
Alex

2
Birisi hala arıyorsa, bu doğru çözüm :)
passatgt

1
Bu büyü! Nasıl buldun?
andreikashin

1
@andreikashin, Yardımcı olduysa bir oylama yapmayı düşünün. Teşekkürler.
Saad Mahmud

13

android:gravity="right"LinearLayout'a ekleyin . varsayarsak TextViewvardırlayout_width="wrap_content"


2
Özellikle LinearLayout içindeki tek bir bileşeni hizalamayı söyledi. Doğrusal mizanpajın kendisi değil: mizanpajın kendisi fill_parent olarak ayarlanmıştır.
RichieHH


4

Bunu en kolay şekilde yaptım:

Sadece bir almak RelativeLayout ve koyun çocuk görünümünü en yerleştirmek istediğiniz, içinde sağ tarafta.

    <LinearLayout
        android:id="@+id/llMain"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#f5f4f4"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:paddingBottom="20dp"
        android:paddingLeft="15dp"
        android:paddingRight="15dp"
        android:paddingTop="20dp">

        <ImageView
            android:id="@+id/ivOne"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher" />


        <TextView
            android:id="@+id/txtOne"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:text="Hiren"
            android:textAppearance="@android:style/TextAppearance.Medium"
            android:textColor="@android:color/black" />

        <RelativeLayout
            android:id="@+id/rlRight"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="right">


            <ImageView
                android:id="@+id/ivRight"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="5dp"
                android:src="@drawable/ic_launcher" />

        </RelativeLayout>
    </LinearLayout>

Umarım size yardımcı olur.


3

Bir RelativeLayout kullanmalı ve iyi görünene kadar sürüklemelisiniz :)

    <ImageView
        android:id="@+id/button_info"
        android:layout_width="30dp"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="10dp"
        android:contentDescription="@string/pizza"
        android:src="@drawable/header_info_button" />

</RelativeLayout>

2
"sürükleyin" çoklu çözünürlüklü ekran için önerilmez
Moses Aprico

3

linear layoutile layout_width="fill_parent"ve aynı layout width+ işaretli widget'ı gravity as rightsağa hizalar.

TextViewAşağıdaki örnekte 2 s kullanıyorum topicTitle, solda ve topicQuestionssağda.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="20dp"
        android:orientation="horizontal">

    <TextView
        android:id="@+id/topicTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/topicQuestions"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="right"
        android:textSize="18sp"
        android:textStyle="bold" />
    </LinearLayout>

</RelativeLayout>

Çıktı


2

Düzeni_genişliği olarak değiştirmeye çalışın android:layout_width="match_parent"çünkü gravity:"right"metni layout_width içindeki hizalar ve sarma içeriğini seçerseniz nereye gideceğinizi yoktur, ancak eşleşen üst öğeyi seçerseniz sağa gidebilir.


2

Ekstra görünüm veya öğe kullanmaya gerek yok:

// bu çok kolay ve basit

<LinearLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal"
>

// bu sola hizalama

<TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="No. of Travellers"
      android:textColor="#000000"
      android:layout_weight="1"
      android:textStyle="bold"
      android:textAlignment="textStart"
      android:gravity="start" />

// bu doğru hizalama

<TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Done"
      android:textStyle="bold"
      android:textColor="@color/colorPrimary"
      android:layout_weight="1"
      android:textAlignment="textEnd"
      android:gravity="end" />

</LinearLayout>

0

TextView durumunda:

<TextView 
    android:text="TextView" 
    android:id="@+id/textView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"   
    android:gravity="right"
    android:textAlignment="gravity">    
</TextView>

0

Görünüm eklemek biraz zordur ve aşağıdaki gibi tüm ekran genişliklerini kapsar:

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<View
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_weight="1" />                

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

Bu kodu deneyin:

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="right"
    >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Create Account"/>

</LinearLayout>

-1

İşte bir örnek. düzenlemek için anahtar aşağıdaki gibidir

android:layout_width="0dp"
android:layout_weight="1"

Tam kod

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="5dp">

    <TextView
        android:id="@+id/categoryName"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="abcd" />

    <TextView
        android:id="@+id/spareName"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="efgh" />

</LinearLayout>

resim açıklamasını buraya girin


-1

TextView metnini şu şekilde sağa ayarlamak için match_parent ve gravity komutunu kullanın:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <TextView android:text="TextView" android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="right">
    </TextView>

</LinearLayout>

-2

Bunu dene..

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:orientation="horizontal" 
    android:gravity="right" >



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

</LinearLayout>
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.