Tombol Align Kanan dalam LinearLayout horizontal

130

Jika Anda melihat gambar terlampir. Saya perlu tombol saya untuk diluruskan tetapi untuk beberapa alasan itu tidak berfungsi dengan 'gravitasi: benar' ...

Batalkan Tambah

Ini kode saya untuk tata letak itu:

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

Kenapa tidak bekerja ?!

ROMANIA_engineer
sumber
6
Coba tata letak Relatif dalam hal ini. LL tidak akan bekerja,
AAnkit
4
Jika Anda ingin menggunakan LinearLayout, gunakan dua linearlayout bagian dalam dan gunakan layout_weight bersama dengan layout_gravity. Ini akan bekerja dengan baik.
Vamsi Challa
@VamsiChalla mungkin dengan satu, periksa jawaban baru saya di bawah ini.
TWiStErRob

Jawaban:

137

Gunakan kode di bawah ini untuk itu

<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>
Dipak Keshariya
sumber
3
Sepertinya atribut 'layout_alignParentRight' tidak tersedia untuk tombol dalam kasus ini? Mungkin sudah usang?
20
ru menggunakan relativelayout bukan linearlayout?
Dipak Keshariya
1
Ah sial .. Maaf soal itu, aku benar-benar melewatinya. Terima kasih!
4
Masih mengherankan saya bagaimana sesuatu yang tampak begitu mudah menjadi sangat sulit untuk menggunakan linearlayout.
AlvaroSantisteban
2
@DipakKeshariya untuk pemirsa di masa depan, Anda dapat menggunakan "android: layout_gravity =" top | right "linearlayout
SupimpaAllTheWay
145

LinearLayoutSolusi tunggal . Hanya menambahkan tampilan spasi sederhana:
(Sepertinya tidak ada yang menyebutkan ini, hanya solusi multi-tata letak yang lebih rumit.)

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

Perhatikan Tampilan "yang disorot", saya tidak mengubah apa pun. Tinggi = 0 memastikan tidak terlihat. Lebar = 0 adalah karena lebar ditentukan oleh LinearLayoutberdasarkan berat = 1. Ini berarti bahwa tampilan pengatur jarak akan merentang sebanyak mungkin ke arah (orientasi) dari LinearLayout.

Perhatikan bahwa Anda harus menggunakan android.widget.Spaceatau android.support.v4.widget.SpacebukannyaView jika tingkat API dan / atau dependensi Anda mengizinkannya. Spacemencapai pekerjaan dengan cara yang lebih murah, karena itu hanya mengukur dan tidak mencoba menggambar seperti Viewhalnya; itu juga lebih ekspresif menyampaikan niat.

TWiStErRob
sumber
2
Cukup tambahkan android: layout_weight = "1" ke R.id.lblExpenseCancel dan itu saja.
hrules6872
1
@h_rules yang berfungsi jika Anda ingin meretas, tetapi bayangkan apa yang terjadi ketika Anda menambahkan latar belakang ke TextView.
TWiStErRob
2
Saya bertanya-tanya mengapa jawaban ini diturunkan, ia bekerja dan itu bagus, saya pasti akan mencobanya.
Elvedin Hamzagic
Itu sempurna sebagai pengembang seluler
Shivanand Darur
Jika Anda menambahkan spacer, maka dalam ukuran layar yang berbeda, Anda memiliki hasil yang berbeda. Jadi itu bukan solusi ideal.
GeoMint
29

Solusi nyata untuk kasus ini:

android:layout_weight="1" untuk TextView, dan tombol Anda bergerak ke kanan!

nicolas asinovich
sumber
28

Saya tahu pertanyaan ini ditanyakan beberapa saat yang lalu, tetapi saya telah melakukan ini sebelumnya dan memungkinkan untuk lebih banyak kontrol ketika menyelaraskan item. Jika Anda melihatnya seperti pemrograman web, itu membantu. Anda hanya membuat sarang yang lain LinearLayoutyang akan berisi tombol Anda di dalamnya. Anda kemudian dapat mengubah gravitasi tata letak tombol dan membuatnya pergi ke kanan saat TextViewmasih di sebelah kiri.

Coba kode ini:

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

Anda mungkin harus bermain dengan bantalan pada tata letak bersarang sehingga bertindak sesuai keinginan Anda.

BobbyD17
sumber
2
Anda harus menggunakan FrameLayout untuk tata letak bersarang Anda. Untuk memposisikan satu elemen tunggal adalah untuk apa itu. Dan juga, beri bobot agar memenuhi bagian kanan orang tua. +1 karena tidak menggunakan Relative Layout.
Hjalmar
10

coba yang ini

 <?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>
NagarjunaReddy
sumber
9

Seperti yang disebutkan beberapa kali sebelumnya: Untuk beralih dari LinearLayout ke RelativeLayout berfungsi, tetapi Anda juga dapat menyelesaikan masalah alih-alih menghindarinya. Gunakan alat yang disediakan LinearLayout: Beri TextView bobot = 1 (lihat kode di bawah), bobot tombol Anda harus tetap 0 atau tidak sama sekali. Dalam hal ini TextView akan mengambil semua ruang yang tersisa, yang tidak digunakan untuk menampilkan konten TextView atau ButtonView Anda dan menekan tombol Anda ke kanan.

<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>
Duri
sumber
2
Ini jawaban terbaik. Saya hanya ingin menulis sesuatu yang serupa sampai saya menemukan posting Anda.
codingdave
Itu jauh lebih baik daripada beralih ke RelativeLayoutkarena masalah memori, karena RelativeLayoutmengkonsumsi lebih banyak memori daripadaLinearLayout
ThunderWiring
7

Anda perlu menambahkan gravitasi ke tata letak bukan Tombol, gravitasi dalam pengaturan tombol adalah untuk Teks di dalam tombol

<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">
baiklah
sumber
2
Bukankah itu kemudian menyelaraskan TextView juga? Saya hanya perlu tombol kanan selaras ...
1
Jika Anda hanya perlu menyelaraskan tombol, gunakan RelativeLayout.
selamat
1
Bahkan jika Anda ingin semua tombol diluruskan, ini tidak berfungsi (API 16). Tampilan anak-anak masih selaras di sebelah kiri.
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>

Ini akan menyelesaikan masalah Anda

Anand S Joshi
sumber
3

Jika Anda tidak ingin, atau tidak bisa, menggunakan RelativeLayout, Anda dapat membungkus tombol dalam LinearLayout dengan orientasi "vertikal" dan lebar "fill_parent".

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

Ini karena jika orientasi LinearLayout adalah horisontal, gravitasi hanya akan mempengaruhi tampilan secara vertikal. Dan jika orientasinya 'vertikal', gravitasi hanya akan memengaruhi tampilan secara horizontal. Lihat di sini untuk detail lebih lanjut tentang penjelasan orientasi / gravitasi LinearLayout.

Stephanie Gu
sumber
2

Cukup tambahkan android: gravity = "right" tata letak induk baris ini ini akan berfungsi.

<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>
velraj
sumber
0

Saya telah menggunakan tata letak yang mirip dengan 4 TextViews. Dua TextViews harus disejajarkan ke kiri dan dua TextViews harus disejajarkan ke kanan. Jadi, inilah solusi saya, jika Anda ingin menggunakannya LinearLayoutssendiri.

<?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>
Vamsi Challa
sumber
0

Anda dapat menggunakan RelativeLayout atau mengatur gravitasi = "kanan" pada tata letak induk Tombol Anda.

HuynhHan
sumber
0

Saya tahu ini sudah tua tapi ini yang lain dalam Tata Letak Linear adalah:

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

Harap perhatikan layout_gravity bukan hanya gravitasi.

Juanjo
sumber
Ada apa dengan ini center_vertical|bottom|top? Mereka tampak seperti gravitasi penyelarasan eksklusif bagi saya.
TWiStErRob
0

Anda harus menggunakan Relativelayout alih-alih Linearlayout sebagai tata letak utama. Jika Anda menggunakan Relativelayout sebagai utama maka dengan mudah menangani tombol di sisi kanan karena tata letak relatif memberi kita alignParent kanan, kiri, atas dan bawah.

Farhan Ghaffar
sumber
-2

Gunakan lebar tata letak di tombol seperti android: layout_width = "75dp"

Dihapus karena negatif
sumber