tampilan tidak dipindahkan ke atas di LinearLayout

Saya memiliki LinearLayout dan XML-nya adalah:

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

    <Button
        android:id="@+id/button3"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Button" />

    <Button
        android:id="@+id/button2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:text="Button" />

    <Button
        android:id="@+id/button"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:text="Button" />
</LinearLayout>

dan hasilnya adalah:

masukkan deskripsi gambar di sini

seperti yang Anda lihat, tombol kiri atas memiliki sedikit margin dari atas tetapi seperti yang ditunjukkan kode, tidak ada margin. mengapa ini terjadi?

juga ada solusi aneh yaitu jika Anda mengatur gravity:top ke semua tombol Anda akan mendapatkan hasil yang diharapkan. tapi kenapa ini diperlukan karena linearlayout(horiz) harus mulai menambahkan item dari kiri atas ke kanan atas.


person ClassY    schedule 28.05.2021    source sumber


Jawaban (3)


Saya merujuk beberapa dokumen dan utas SO untuk mencari solusi karena pertanyaan itu tampak sangat menarik bagi saya.

Akhirnya saya menemukan alasannya.

LinearLayout horizontal menyelaraskan garis dasar semua kontrol turunannya secara default. Jadi baris teks pertama di tombol multi-baris Anda sejajar secara vertikal dengan satu baris teks di tombol lainnya.

Untuk menonaktifkan perilaku ini, setel android:baselineAligned="false" pada LinearLayout.

Semua kredit diberikan kepada @Karu untuk jawaban ini: https://stackoverflow.com/a/8290258/4211264

person Bhargav Thanki    schedule 28.05.2021

Hal ini disebabkan pembungkusan teks pada tombol pertama. Dua tombol lainnya mengambil ruang yang terlalu cocok di layar. Dan tombol pertama mencoba untuk tetap berada di layar dengan membungkus sendiri. Saya tidak tahu apa tugas Anda. Jika Anda ingin menyimpan tombol dalam satu baris coba gunakan layout_weight = 1 pada semua tombol.

person Konstantin Lysyy    schedule 28.05.2021
comment
Hai. Terima kasih atas tanggapan Anda. ketinggian diatur untuk membungkus. jadi bukankah ini harus meregangkan tombol secara vertikal hingga muat? jika demikian mengapa ini mendapat margin dari atas karena itu tidak ada hubungannya dengan lebarnya - person ClassY; 28.05.2021

Ini karena Anda telah memberikan bobot yang berbeda pada setiap tombol. Anda perlu memberi bobot yang sama pada setiap tombol. Ganti kode file tata letak Anda dengan ini.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:orientation="horizontal"
tools:context=".MainActivity">

<Button
    android:id="@+id/button3"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="Button" />

<Button
    android:id="@+id/button2"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="Button" />

<Button
    android:id="@+id/button"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="Button" />
person paul035    schedule 28.05.2021
comment
Hai. Terima kasih atas tanggapan Anda. tapi ini akan memberikan ''lebar yang sama untuk semua turunan langsung. masalah saya adalah margin yang didapat dari atas yang tidak dapat ditemukan. - person ClassY; 28.05.2021
comment
OP menanyakan alasan margin ekstra di atas pada tombol pertama. Dan berdasarkan kebutuhan, mungkin perlu memberikan bobot yang berbeda untuk semua widget - person Bhargav Thanki; 28.05.2021