Yatay Doğrusal Düzende Sağa Hizala düğmesi


130

Ekteki resme bakarsanız. Düğmemin sağa hizalanmasına ihtiyacım var ama nedense 'yerçekimi: doğru' ile çalışmıyor ...

İptal Ekle

İşte o düzen için kodum:

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

    <TextView
        android:id="@+id/lblExpenseCancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/cancel"
        android:textColor="#404040"
        android:layout_marginLeft="10dp"
        android:textSize="20sp"
        android:layout_marginTop="9dp" />

    <Button
        android:id="@+id/btnAddExpense"
        android:layout_width="wrap_content"
        android:layout_height="45dp"
        android:background="@drawable/stitch_button"
        android:layout_marginLeft="10dp"
        android:text="@string/add"
        android:layout_gravity="right"
        android:layout_marginRight="15dp" />

</LinearLayout>

Neden çalışmıyor ?!


6
Bu durumda Göreli düzeni deneyin. LL çalışmıyor,
AAnkit

4
LinearLayout kullanmak istiyorsanız, iki iç lineer düzen kullanın ve layout_gravity ile birlikte layout_weight kullanın. İyi çalışacak.
Vamsi Challa

@VamsiChalla bir tane ile mümkün, aşağıdaki yeni cevabımı kontrol edin.
TWiStErRob

Yanıtlar:


137

Bunun için aşağıdaki kodu kullanın

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="35dp"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/lblExpenseCancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="9dp"
        android:text="@string/cancel"
        android:textColor="#404040"
        android:textSize="20sp" />

    <Button
        android:id="@+id/btnAddExpense"
        android:layout_width="wrap_content"
        android:layout_height="45dp"
        android:layout_alignParentRight="true"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="15dp"
        android:background="@drawable/stitch_button"
        android:text="@string/add" />

</RelativeLayout>

3
Görünüşe göre 'layout_alignParentRight' özelliği bu durumda düğme için mevcut değil mi? Kullanımdan kaldırılmış olabilir mi?

20
ru lineer düzen yerine relativelayout kullanarak?
Dipak Keshariya

1
Ah kahretsin .. Bunun için üzgünüm, tamamen geçmişe baktım. Teşekkürler!

4
Doğrusal düzeni kullanmaya çalışırken bu kadar kolay görünen bir şeyin bu kadar zor hale gelmesi beni hala şaşırtıyor.
AlvaroSantisteban

2
@DipakKeshariya, gelecekteki izleyiciler için "android: layout_gravity =" top | right "linearlayout'u kullanabilirsiniz
SupimpaAllTheWay

145

Tek LinearLayoutçözüm. Sadece basit bir boşluk görünümü eklemek:
(Kimse bundan bahsetmemiş gibiydi, sadece daha karmaşık çoklu yerleşim çözümleri.)

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

    <TextView
        android:id="@+id/lblExpenseCancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/cancel"
        android:textColor="#404040"
        android:layout_marginLeft="10dp"
        android:textSize="20sp"
        android:layout_marginTop="9dp" />

    <!-------------------------  ADDED SPACER VIEW -------------------->
    <View
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_weight="1"
        />
    <!------------------------- /ADDED SPACER VIEW -------------------->

    <Button
        android:id="@+id/btnAddExpense"
        android:layout_width="wrap_content"
        android:layout_height="45dp"
        android:background="@drawable/stitch_button"
        android:layout_marginLeft="10dp"
        android:text="@string/add"
        android:layout_gravity="right"
        android:layout_marginRight="15dp" />

</LinearLayout>

"Vurgulanan" Görünüme dikkat edin, başka hiçbir şeyi değiştirmedim. Yükseklik = 0 görünmemesini sağlar. Genişlik = 0, genişliğin LinearLayoutağırlık = 1'e göre belirlenmesidir . Bu, aralayıcı görünümünün mümkün olduğunca çok yön (oryantasyon) yönünde gerileceği anlamına gelir LinearLayout.

API seviyeniz ve / veya bağımlılıklarınız izin veriyorsa bunun yerine veya kullanmanız gerektiğiniandroid.widget.Spaceandroid.support.v4.widget.SpaceView unutmayın . Spaceişi daha ucuza yapar, çünkü sadece ölçer ve yaptığı gibi hiçbir şeyi çizmeye Viewçalışmaz; aynı zamanda niyeti iletmek daha anlamlı.


2
R.id.lblExpenseCancel'e android: layout_weight = "1" eklemeniz yeterli, hepsi bu.
hrules6872

1
@h_rules, hacklemek istiyorsanız çalışır, ancak TextView'e arka plan eklediğinizde ne olacağını hayal edin.
TWiStErRob

2
Bu cevabın neden olumsuz oy aldığını merak ediyorum, işe yarıyor ve güzel, kesinlikle deneyeceğim.
Elvedin Hamzagic

Bu bir mobil geliştirici olarak mükemmel
Shivanand Darur

Bir boşluk eklerseniz, farklı ekran boyutlarında farklı sonuç elde edersiniz. Yani ideal çözüm bu değil.
GeoMint

30

Bunun için gerçek çözüm:

android:layout_weight="1" TextView için ve düğmeniz sağa hareket etsin!


28

Bu sorunun bir süre önce sorulduğunu biliyorum ama bunu daha önce de yaptım ve öğeleri hizalarken daha fazla kontrole izin veriyor. Web programlaması gibi bakarsanız yardımcı olur. Sadece LinearLayoutiçinde düğmenizi içerecek bir tane daha iç içe geçirirsiniz . Daha sonra düğme düzeninin yerçekimini değiştirebilir ve düğme düzeninin yerçekimini sağaTextView hala solda .

Bu kodu deneyin:

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

<TextView
    android:id="@+id/lblExpenseCancel"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/cancel" 
    android:textColor="#404040"         
    android:layout_marginLeft="10dp" 
    android:textSize="20sp" 
    android:layout_marginTop="9dp"/>

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="right"
    android:orientation="horizontal" >

    <Button
        android:id="@+id/btnAddExpense"
        android:layout_width="wrap_content"
        android:layout_height="45dp"
        android:background="@drawable/stitch_button"
        android:layout_marginLeft="10dp"                    
        android:text="@string/add" 
        android:layout_gravity="right" 
        android:layout_marginRight="15dp"/>

</LinearLayout>

İstediğiniz gibi davranması için iç içe yerleştirilmiş mizanpajdaki dolgu ile oynamak zorunda kalabilirsiniz.


2
İç içe geçmiş düzeniniz için bir FrameLayout kullanmalısınız. Tek bir öğeyi konumlandırmak, bunun için. Ve ayrıca, ebeveynin doğru kısmını doldurması için ona bir ağırlık verin. Relative Layout kullanmadığınız için +1.
Hjalmar

10

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_gravity="right" 
    android:layout_height="wrap_content"             
    android:orientation="horizontal"  >

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

<TextView
    android:id="@+id/lblExpenseCancel"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="10dp"
    android:layout_marginTop="9dp"
    android:text="cancel"
    android:textColor="#ffff0000"
    android:textSize="20sp" />

<Button
    android:id="@+id/btnAddExpense"
    android:layout_width="wrap_content"
    android:layout_height="45dp"
    android:layout_alignParentRight="true"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="15dp"
     android:textColor="#ff0000ff"
    android:text="add" />

 </RelativeLayout>
  </LinearLayout>

9

Daha önce birkaç kez bahsedildiği gibi: LinearLayout'tan RelativeLayout'a geçmek işe yarıyor, ancak bundan kaçınmak yerine sorunu da çözebilirsiniz. LinearLayout'un sağladığı araçları kullanın: TextView'e bir ağırlık = 1 verin (aşağıdaki koda bakın), düğmenizin ağırlığı 0 olarak kalmalı veya hiç kalmamalıdır. Bu durumda TextView, TextView veya ButtonView içeriğinizi görüntülemek için kullanılmayan ve düğmenizi sağa iten kalan tüm alanı alacaktır.

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

        <TextView
            android:id="@+id/lblExpenseCancel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/cancel"
            android:textColor="#404040"
            android:layout_marginLeft="10dp"
            android:textSize="20sp"
            android:layout_marginTop="9dp"

            **android:layout_weight="1"**

            />

        <Button
            android:id="@+id/btnAddExpense"
            android:layout_width="wrap_content"
            android:layout_height="45dp"
            android:background="@drawable/stitch_button"
            android:layout_marginLeft="10dp"
            android:text="@string/add"
            android:layout_gravity="right"
            android:layout_marginRight="15dp" />

    </LinearLayout>

2
Bu en iyi cevap. Gönderinizi bulana kadar benzer bir şey yazmak istedim.
codingdave

Bu, RelativeLayoutbellek sorunları nedeniyle geçiş yapmaktan çok daha iyi çünkü RelativeLayoutdaha fazla bellek tüketiyorLinearLayout
ThunderWiring

7

Düzene Düğmeye değil, yerçekimi eklemelisiniz, düğme ayarlarında yerçekimi düğme içindeki Metin içindir

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_gravity="right" 
android:layout_height="wrap_content"             
android:orientation="horizontal" 
android:layout_marginTop="35dp">

2
Bu, TextView'ı da doğru hizalamaz mı? Sadece düğmenin sağa hizalanmasına ihtiyacım var ...

1
Yalnızca düğmeyi hizalamanız gerekiyorsa, RelativeLayout'u kullanın.
goodm

1
Tüm düğmelerin hizalanmasını isteseniz bile bu çalışmaz (API 16). Çocuk görüşleri hala sola hizalı.
m0skit0

5
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"             
    android:orientation="horizontal" 
    android:layout_marginTop="35dp">

    <TextView
        android:id="@+id/lblExpenseCancel"
        android:layout_width="0dp"
        android:layout_weight="0.5"
        android:layout_height="wrap_content"
        android:text="@string/cancel" 
        android:textColor="#404040"         
        android:layout_marginLeft="10dp" 
        android:textSize="20sp" 
        android:layout_marginTop="9dp"/>              

    <Button
        android:id="@+id/btnAddExpense"
        android:layout_width="0dp"
        android:layout_weight="0.5"
        android:layout_height="wrap_content"
        android:background="@drawable/stitch_button"
        android:layout_marginLeft="10dp"                    
        android:text="@string/add" 
        android:layout_gravity="right" 
        android:layout_marginRight="15dp"/>

</LinearLayout>

Bu sorununu çözecektir


3

RelativeLayout kullanmak istemiyor ya da kullanamıyorsanız, düğmeyi "dikey" yönelim ve "fill_parent" genişliğiyle bir LinearLayout içine kaydırabilirsiniz.

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

  <TextView
      android:id="@+id/lblExpenseCancel"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="@string/cancel"
      android:textColor="#404040"
      android:layout_marginLeft="10dp"
      android:textSize="20sp"
      android:layout_marginTop="9dp" />

  <LinearLayout
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical">
     <Button
        android:id="@+id/btnAddExpense"
        android:layout_width="wrap_content"
        android:layout_height="45dp"
        android:background="@drawable/stitch_button"
        android:layout_marginLeft="10dp"
        android:text="@string/add"
        android:layout_gravity="right"
        android:layout_marginRight="15dp" />
  </LinearLayout>
</LinearLayout> 

Bunun nedeni, LinearLayout'un oryantasyonu yatay ise, yerçekiminin görünümleri yalnızca dikey olarak etkilemesidir. Yönlendirme 'dikey' ise, yerçekimi sadece yatay olarak görünümleri etkiler. LinearLayout oryantasyonu / yerçekimi açıklaması hakkında daha fazla ayrıntı için buraya bakın .


2

Sadece android: gravity = "sağ" bu satırı ana düzeni ekleyin, bu işe yarayacaktır.

<LinearLayout
        android:id="@+id/withdrawbuttonContainer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@color/colorPrimary"
        android:orientation="horizontal"
        **android:gravity="right"**
        android:weightSum="5"
        android:visibility="visible">

        <Button
            android:id="@+id/bt_withDraw"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/BTN_ADD"
            app:delay="1500" />

        <Button
            android:id="@+id/btn_orderdetail_amend"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/BTN_CANCEL"
            app:delay="1500" />
</LinearLayout>

0

4 TextViews ile benzer bir düzen kullandım . İki TextViews sola, iki TextViews sağa hizalanmalıdır. Yani, LinearLayoutstek başına kullanmak istiyorsanız, işte benim çözümüm .

<?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:baselineAligned="false"
    android:padding="10dp" >

    <LinearLayout
        android:layout_width="0dip"
        android:layout_weight="0.50"
        android:layout_height="match_parent"
        android:gravity="left"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/textview_fragment_mtfstatus_level"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/level"
            android:textAppearance="?android:attr/textAppearanceMedium" />

        <TextView
            android:id="@+id/textview_fragment_mtfstatus_level_count"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            android:textAppearance="?android:attr/textAppearanceMedium" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dip"
        android:layout_weight="0.50"
        android:layout_height="match_parent"
        android:gravity="right"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/textview_fragment_mtfstatus_time"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/time"
            android:textAppearance="?android:attr/textAppearanceMedium"
             />

        <TextView
            android:id="@+id/textview_fragment_mtfstatus_time_count"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            android:textAppearance="?android:attr/textAppearanceMedium" 
            />
    </LinearLayout>

</LinearLayout>

0

RelativeLayout'u kullanabilir veya Düğmenizin üst düzeninde gravity = "right" ayarını yapabilirsiniz.


0

Bunun eski olduğunu biliyorum ama işte Doğrusal Düzende bir tane daha:

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

<TextView
    android:id="@+id/lblExpenseCancel"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/cancel"
    android:textColor="#404040"
    android:layout_marginLeft="10dp"
    android:textSize="20sp"
    android:layout_marginTop="9dp" />

<Button
    android:id="@+id/btnAddExpense"
    android:layout_width="wrap_content"
    android:layout_height="45dp"
    android:background="@drawable/stitch_button"
    android:layout_marginLeft="10dp"
    android:text="@string/add"
    android:layout_gravity="center_vertical|bottom|right|top"
    android:layout_marginRight="15dp" />

Lütfen yerçekiminin aksine layout_gravity'ye dikkat edin.


Ne var ne yok center_vertical|bottom|top? Bana özel hizalama yerçekimleri gibi görünüyorlar.
TWiStErRob

0

Ana mizanpaj olarak Linearlayout yerine Relativelayout kullanmalısınız. Relativelayout'u ana olarak kullanırsanız, sağ taraftaki düğmeyi kolayca kullanın çünkü göreli düzen bize alignParent sağ, sol, üst ve alt sağlar.


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.