Letakkan tombol di bagian bawah layar dengan LinearLayout?


136

Saya memiliki kode berikut, bagaimana cara membuatnya sehingga 3 tombol di bagian bawah?

    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="60dp"
        android:gravity="center"
        android:text="@string/observer"
        android:textAppearance="?android:attr/textAppearanceLarge"
        tools:context=".asdf"
        android:weight="1" />

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

        <Button
            android:id="@+id/button1"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="145dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal|center"
            android:text="1" />

        <Button
            android:id="@+id/button2"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="145dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal|center"
            android:text="2" />

        <Button
            android:id="@+id/button3"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="145dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal|center"
            android:text="3" />
    </LinearLayout>


apa pandangan ini dibungkus? tata letak bingkai? tata letak relatif?
Nirvana Tikku

1
Kode Anda mengandung salah ketik. Dengan android:weight="1"Anda mungkin berarti android:layout_weight="1". Ini bukan masalahmu.
Brian Attwell


Mungkin lebih mudah menggunakan tata ruang yang ditemukan di kotak alat. Anda dapat menempatkannya di atas tata letak yang ada di atas tombol dan ukurannya dan itu akan mendorongnya ke bawah.
Alex

Jawaban:


268

Anda perlu memastikan empat hal:

  • Luar Anda LinearLayoutmemilikilayout_height="match_parent"
  • Bagian dalam Anda LinearLayoutmemiliki layout_weight="1"danlayout_height="0dp"
  • Anda TextViewpunyalayout_weight="0"
  • Anda telah mengatur gravitasi dengan benar di batin Anda LinearLayout: android:gravity="center|bottom"

Perhatikan itu fill_parenttidak berarti "mengambil semua ruang yang tersedia". Namun, jika Anda menggunakan layout_height="0dp"dengan layout_weight="1", maka tampilan akan memakan semua ruang yang tersedia ( Tidak bisa mendapatkan tata letak yang tepat dengan "fill_parent" ).

Berikut adalah beberapa kode yang saya tulis dengan cepat yang menggunakan dua LinearLayouts dengan cara yang mirip dengan kode Anda.

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

    <TextView
        android:id="@+id/textView1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="@string/cow"
        android:layout_weight="0"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1"
        android:gravity="center|bottom"
        android:orientation="vertical" >

        <Button
            android:id="@+id/button1"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="145dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal|center"
            android:text="1" />

        <Button
            android:id="@+id/button2"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="145dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal|center"
            android:text="2" />

        <Button
            android:id="@+id/button3"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="145dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal|center"
            android:text="3" />
    </LinearLayout>

</LinearLayout>

Hasilnya mirip dengan ini:

masukkan deskripsi gambar di sini


Dipilih hanya untuk catatan tentang cara mendapatkan tampilan untuk mengisi semua ruang yang tersedia! Terima kasih, jawaban yang bagus!
lisa

Peringatan Lint itu ...!
Yousha Aleayoub

Ini bukan solusi terbaik karena setelah itu Anda tidak dapat mengatur tampilan di tengah layar yang tersisa ......................... jadi penghargaan solusi terbaik berlaku untuk ini answer - stackoverflow.com/a/26140793/4741746
sushant gosavi

Bisakah Anda jelaskan pentingnya layout_weight="0"atau apa fungsinya?
Rahat Zaman

23

Anda dapat menggunakan RelativeLayoutdan menyelaraskannya ke bawahandroid:layout_alignParentBottom="true"


1
Apakah tidak mungkin menggunakan tata letak linier?
thedeepfield

Ini. Seperti @AND_DEV sudah katakan: Gunakan layout_weight="1". Dengan ini LinearLayout Anda akan menempati ketinggian yang tersisa di layar; sekarang Anda dapat mengatur gravitasi Tombol Anda ke bawah.
Ahmad

1
Relativelayout sulit dibaca, hampir tidak pernah melakukan apa yang Anda inginkan dan umumnya buruk untuk dipertahankan. Saya akan mencapai performa 30 linearlayout lebih dari 1 relativelayout setiap hari dalam seminggu, hanya karena menghemat berjam-jam mengutak-atik frustasi.
G_V

@Ahmed saya pikir pertanyaan yang diajukan sangat jelas seperti untuk LinearLayout, Tetapi dijawab untuk RelativityLayout dan Brian Attwell menjawab dengan jelas dengan android: gravity = "center | bottom"!
Gopi.cs

@ Gopi.cs Saya benar-benar tidak yakin mengapa Anda mengomentari jawaban yang saya berikan lebih dari 6 (!) Tahun lalu. Ini tahun 2019, cukup gunakan ConstraintLayout.
Ahmad

12

Buat tata letak Relatif dan di dalam tata letak itu buat tombol Anda dengan baris ini

android:layout_alignParentBottom="true"

2
Selain itu menambahkan android:layout_centerHorizontal="true"juga pusat secara horizontal membuat ini solusi yang bagus.
Thomas Mondel

1
Trik Hebat. Terima kasih
zackygaurav

4

pertama buat nama file sebagai footer.xml taruh kode ini di dalamnya.

<?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="78dp"
    android:layout_gravity="bottom"
    android:gravity="bottom"
 android:layout_weight=".15"
    android:orientation="horizontal"
    android:background="@drawable/actionbar_dark_background_tile" >
    <ImageView
        android:id="@+id/lborder"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight=".14"
        android:background="@drawable/action_bar_left_button"
        android:src="@drawable/overlay" />
    <ImageView
        android:id="@+id/unknown"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight=".14"
        android:background="@drawable/action_bar_left_button"
        android:src="@drawable/notcolor" />
    <ImageView
        android:id="@+id/open"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight=".14"
        android:background="@drawable/action_bar_left_button"
        android:src="@drawable/openit"
        />
    <ImageView
        android:id="@+id/color"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight=".14"
        android:background="@drawable/action_bar_left_button"
        android:src="@drawable/colored" />
        <ImageView
        android:id="@+id/rborder"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@drawable/action_bar_left_button"
        android:src="@drawable/frames"
        android:layout_weight=".14" />


</LinearLayout>  

lalu buat header.xml dan masukkan kode ini di dalamnya .:

<?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="@dimen/action_bar_height"
    android:layout_gravity="top"
    android:baselineAligned="true"
    android:orientation="horizontal"
    android:background="@drawable/actionbar_dark_background_tile" >
    <ImageView
        android:id="@+id/contact"
        android:layout_width="37dp"
        android:layout_height="wrap_content"
        android:layout_gravity="start"
        android:layout_weight=".18"
        android:scaleType="fitCenter"
        android:background="@drawable/action_bar_left_button"
        android:src="@drawable/logo"/>

    <ImageView
        android:id="@+id/share"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="start"
        android:layout_weight=".14"
        android:background="@drawable/action_bar_left_button"
        android:src="@drawable/share" />

    <ImageView
        android:id="@+id/save"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight=".14"
        android:background="@drawable/action_bar_left_button"
        android:src="@drawable/save" />

    <ImageView
        android:id="@+id/set"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight=".14"
        android:background="@drawable/action_bar_left_button"
        android:src="@drawable/set" />

    <ImageView
        android:id="@+id/fix"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight=".14"
        android:background="@drawable/action_bar_left_button"
        android:src="@drawable/light" />

    <ImageView
        android:id="@+id/rotate"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight=".14"
        android:background="@drawable/action_bar_left_button"
        android:src="@drawable/ic_menu_rotate" />

    <ImageView
        android:id="@+id/stock"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight=".14"
        android:background="@drawable/action_bar_left_button"
        android:src="@drawable/stock" />

</LinearLayout>

dan kemudian di Anda main_activity.xmldan letakkan kode ini di dalamnya: -

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="fill_parent"
tools:context=".MainActivity"
android:id="@+id/relt"
android:background="@drawable/background" >

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="78dp"
    android:id="@+id/down"
    android:layout_alignParentBottom="true" >

    <include
        android:layout_width="fill_parent"
        android:layout_height="78dp"
        layout="@layout/footer" >
    </include>
</LinearLayout>
<ImageView
    android:id="@+id/view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/down"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_below="@+id/inc"
   >  
    </ImageView> 
    <include layout="@layout/header"
        android:id="@+id/inc"
        android:layout_width="fill_parent"
        android:layout_height="50dp"></include> 

selamat coding :)


Apakah pesanan itu penting? Saya perhatikan Anda meletakkan footer sebagai elemen pertama, dan header sebagai yang terakhir.
Martin Konecny

@ MartinKonecny, tidak masalah karena RelativeLayout memiliki atributnya sendiri sehingga Anda dapat mengontrol di mana letak tata letak lain yang cocok di dalamnya. seperti: layout_below, dll.
k0sh

3

Anda dapat melakukan ini dengan mengambil Layout bingkai sebagai Layout induk dan kemudian meletakkan layout linear di dalamnya. Berikut ini sebuah contoh:

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

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:textSize="16sp"/>


<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="5dp"      
    android:textSize="16sp"
    />

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:textSize="16sp"/>

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="5dp"
     android:textSize="16sp"/>




</LinearLayout>

<Button
    android:id="@+id/button2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    android:layout_gravity="bottom"
    />
 </FrameLayout>

3
<LinearLayout
 android:id="@+id/LinearLayouts02"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical"
 android:gravity="bottom|end">

<TextView
android:id="@+id/texts1"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_weight="2"
android:text="@string/forgotpass"
android:padding="7dp"
android:gravity="bottom|center_horizontal"
android:paddingLeft="10dp"
android:layout_marginBottom="30dp"
android:bottomLeftRadius="10dp"
android:bottomRightRadius="50dp"
android:fontFamily="sans-serif-condensed"
android:textColor="@color/colorAccent"
android:textStyle="bold"
android:textSize="16sp"
android:topLeftRadius="10dp"
android:topRightRadius="10dp"/>

</LinearLayout>

1

Cukup tambahkan layout_weight = "1" ke dalam linearLayout Anda yang memiliki Tombol.

Sunting: - izinkan saya membuatnya sederhana

ikuti sesuatu seperti di bawah ini, nama tag mungkin tidak benar, itu hanya sebuah Ide

<LL>// Top Parrent LinearLayout
   <LL1 height="fill_parent" weight="1" "other tags as requirement"> <TV /><Butons /></LL1> // this layout will fill your screen.
   <LL2 height="wrap_content" weight="1"  orientation="Horizontal" "other tags as requirement"> <BT1 /><BT2/ ></LL2> // this layout gonna take lower part of button height of your screen

<LL/> TOP PARENT CLOSED

menambahkan anroid: layout_weight = "1" tidak memindahkan tata letak linier (dan tombol) ke bawah ...
thedeepfield

@AND_DEV, Anda lupa mengatur android: gravitasi. Saat ini, tombol-tombolnya masih ada di atas, meskipun LinearLayout yang berisi tombol-tombol itu mengisi seluruh area bawah.
Brian Attwell

Tidak, Tombol akan berada di LL2 dan itu akan berada di bagian bawah. Dapat mengatur Gravity jika OP ingin Button di garis bawah yang tepat. Saya hanya memberikan Ide kasar, sehingga dia bisa melakukannya sesuai dengan kebutuhannya.
AAnkit

Apakah saya membaca Anda dengan benar, bahwa Anda menggunakan LL1elemen sebagai pengatur jarak, jadi semuanya berikutnya akan berada di bawah? Trik yang cukup rapi.
greenoldman

0

Tambahkan android:windowSoftInputMode="adjustPan"ke manifes - ke aktivitas yang sesuai:

  <activity android:name="MyActivity"
    ...
    android:windowSoftInputMode="adjustPan"
    ...
  </activity>

0

Anda dapat menggabungkan Tombol Anda dalam RelativeLayout bahkan jika Layout Induk Anda adalah Linear. Pastikan orang tua paling luar memiliki atribut android: layout_height diatur ke match_parent . Dan dalam tag Button itu tambahkan 'android: alignParentBottom = "True"'

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.