Bagaimana cara menghapus tombol di Android?

184

Di aplikasi Android saya, saya memiliki tata letak ini:

<?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="vertical">

    <fragment
         android:id="@+id/map"
         android:layout_width="match_parent"
         android:layout_height="0dp" 
         android:layout_weight="1" 
         class="com.google.android.gms.maps.SupportMapFragment"/>

    <Button
        android:id="@+id/button_back"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:onClick="CloseActivity"
        android:padding="0dp"
        android:text="@+string/back" />

</LinearLayout>

Di pratinjau dan di telepon, sepertinya:

Seperti yang Anda lihat pada tombol di area bawah, ada beberapa padding di sana.

Bagaimana saya bisa menyingkirkan itu, dan biarkan tombol sepenuhnya mengisi area bawah?

akhir
sumber
6
Jawaban DATerre sudah benar selama dua tahun. Bisakah Anda menandainya seperti itu?
JohnnyLambada
1
Pertanyaan ini membutuhkan pengeditan untuk memiliki judul yang lebih baik. Ini telah menjadi hasil pertama di Google Penelusuran sementara itu tidak benar-benar menjawab pertanyaan.
SOFe

Jawaban:

436

Bagi saya masalahnya ternyata adalah minHeight dan minWidth pada beberapa tema Android.

Pada elemen Tombol, tambahkan:

<Button android:minHeight="0dp" android:minWidth="0dp" ...

Atau dengan gaya tombol Anda:

<item name="android:minHeight">0dp</item>
<item name="android:minWidth">0dp</item>
DA Terre
sumber
5
Butuh beberapa saat sampai saya menyadari saya tidak berurusan dengan beberapa perilaku padding aneh tetapi agak kecil.
Pijusn
7
Saya kira jawaban ini sebenarnya tidak menjawab pertanyaan asli sama sekali. Tapi saya masih senang saya menemukannya karena saya tidak tahu mengapa saya Buttonmasih mengambil banyak ruang bahkan setelah pengaturannya android:background="@null". Fakta bahwa Buttongaya default bertanggung jawab adalah tip yang sangat bagus.
Tony Chan
Sangat penting menggunakan kedua android: minHeight = "0dp" android: minWidth = "0dp", dan tidak hanya salah satunya.
Ricardo
Ini menghilangkan sudut membulat dan efek riak dari tombol pada Android Nougat, tahu apa yang menyebabkan perilaku ini?
rraallvv
Jawaban ini memecahkan masalah dengan GridLayout yang berisi tombol dengan opsi autoSize pada teks yang akan mengamuk ketika saya mencoba untuk mendapatkan lebih banyak tombol untuk masuk ke dalam baris / kolom. Jawaban sederhana yang membutuhkan waktu lama untuk saya temukan ...
Mike Hanafey
71

Solusi saya disetel ke 0 properti insetTop dan insetBottom.

<android.support.design.button.MaterialButton
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:insetTop="0dp"
        android:insetBottom="0dp"
        android:text="@string/view_video"
        android:textColor="@color/white"/>
sochas
sumber
1
Inilah yang memecahkan masalah bagi saya juga! Terima kasih!
SPM
46

Itu bukan padding, itu bayangan di sekitar tombol di latar belakangnya yang dapat digambar. Buat latar belakang Anda sendiri dan itu akan hilang.

Delyan
sumber
6
Aku melakukannya. tidak menghilang.
hasan
Bagaimana ukurannya bisa diukur?
Iman Akbari
Ini dia, @Behr, mengubah latar belakang ke warna tombol
Ramon
Saya baru menyadari gambar latar belakang saya memiliki lapisan transparan
Buah
22

Solusi mungkin mencoba menggunakan -venilai untuk margin seperti berikut:

<Button
    android:id="@+id/button_back"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:onClick="CloseActivity"
    android:padding="0dp"
    android:layout_marginLeft="-5dip"
    android:layout_marginRight="-5dip"
    android:layout_marginTop="-5dip"
    android:layout_marginBottom="-5dip"
    android:text="@string/back" />

Itu akan membuat ruang itu lenyap. Maksud saya Anda dapat memilih nilai yang sesuai dip, yang membuatnya hilang. Ini berhasil untuk saya. Semoga ini berhasil untuk Anda.

Puri Shobhit
sumber
4
Saya akan berhati-hati menggunakan solusi ini. Apa yang dilakukannya hanyalah menyembunyikan latar tombol (perbatasan + bayangan) menggunakan margin negatif. Apakah perubahan styling dan border + shadow membutuhkan waktu lebih dari 5dp? Saya lebih suka menggunakan solusi Delyan / Casey Murray untuk berada di sisi yang aman.
lenrok258
Juga, margin negatif tidak secara resmi didukung di Android jadi saya juga akan menghindari ini
Tim Kist
14

Untuk menghapus padding sekitar tombol toggle kita perlu mengatur minWidth dan minHeight 0dp.android:minWidth="0dp" android:minHeight="0dp"

  <ToggleButton
        android:id="@+id/toggle_row_notifications"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minWidth="0dp"
        android:minHeight="0dp"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:padding="@dimen/_5sdp"
        android:textOn=""
        android:textOff=""
        android:background="@android:color/transparent"
        android:button="@drawable/toggle_selector"
        />

atur file Anda yang dapat ditarik ke atribut tombol seperti: android:button="@drawable/toggle_selector"

Di bawah ini adalah toggle_selecter.xmlfile saya

<?xml version="1.0" encoding="utf-8"?>
     <selector xmlns:android="http://schemas.android.com/apk/res/android">
            <item android:drawable="@drawable/notifications_toggle_on" 
                  android:state_checked="true"/>
            <item android:drawable="@drawable/notifications_toggle_off" 
                  android:state_checked="false"/>
     </selector>
Yashoda Bane
sumber
9

Saya baru mengenal android tetapi saya memiliki situasi yang serupa. Saya melakukan apa yang disarankan oleh @Delyan dan juga menggunakan android: background = "@ null" di file layout xml.

Casey Murray
sumber
6

Dalam set XML tombol android:includeFontPadding="false"

pengguna1005462
sumber
6

Saya memiliki masalah yang sama dan sepertinya itu karena warna latar tombol. Coba ubah warna latar menjadi warna lain, misalnya:

android:background="@color/colorActive"

dan lihat apakah itu berfungsi. Anda kemudian dapat menentukan gaya jika Anda ingin tombol itu digunakan.

Panagiotis
sumber
Ini menghilangkan kemampuan penyorotan / animasi tombol.
Altus
6

Untuk menghapus bantalan Atas dan Bawah

<com.google.android.material.button.MaterialButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minHeight="0dp"//to effect the following parameters, this must be added!
        android:insetTop="0dp"
        android:insetBottom="0dp"/>

Untuk menghapus padding Kiri dan Kanan

<com.google.android.material.button.MaterialButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minWidth="0dp"//to effect the following parameters, this must be added!
        android:insetLeft="0dp"
        android:insetRight="0dp"/>
Ali Rezaiyan
sumber
4

Ini bukan padding tetapi atau bayangan latar belakang yang dapat digambar atau masalah dengan minHeightdan minWidth.

Jika Anda masih menginginkan efek riak yang bagus, Anda dapat membuat gaya tombol sendiri menggunakan ?attr/selectableItemBackground:

<style name="Widget.AppTheme.MyCustomButton" parent="Widget.AppCompat.Button.Borderless">
    <item name="android:minHeight">0dp</item>
    <item name="android:minWidth">0dp</item>
    <item name="android:layout_height">48dp</item>
    <item name="android:background">?attr/selectableItemBackground</item>
</style>

Dan menerapkannya pada tombol:

<Button 
    style="@style/Widget.AppTheme.MyCustomButton"
    ... />
Allan Veloso
sumber
2

Tampaknya tidak menjadi padding, margin, atau minheight / lebar. Mengatur android:background="@null"tombol kehilangan animasi sentuhannya, tetapi ternyata pengaturan latar belakang untuk apa pun memperbaiki perbatasan itu.


Saat ini saya bekerja dengan:

minSdkVersion 19
targetSdkVersion 23
juil
sumber
1

Berikan tombol Anda latar belakang khusus: @ drawable / material_btn_blue

Mike6679
sumber
0

Anda juga dapat melakukannya dengan layout_width(height)parameter.

Misalnya saya telah menghapus ruang atas dan bawah dengan android:layout_height="18dp"kode.

Max Zonov
sumber
0

Tombol standar tidak seharusnya digunakan dengan lebar penuh karena itu Anda mengalami hal ini.

Latar Belakang

Jika Anda melihat Material Design - Button Style Anda akan melihat bahwa sebuah tombol memiliki area klik tinggi 48dp, tetapi akan ditampilkan sebagai tinggi 36dp untuk ... beberapa alasan.

Ini adalah garis besar latar belakang yang Anda lihat, yang tidak akan mencakup seluruh area tombol itu sendiri.
Ini memiliki sudut bulat dan beberapa padding dan seharusnya dapat diklik dengan sendirinya, membungkus isinya, dan tidak menjangkau seluruh lebar di bagian bawah layar Anda.

Larutan

Seperti yang disebutkan di atas, yang Anda inginkan adalah latar belakang yang berbeda . Bukan tombol standar, tetapi latar belakang untuk item yang dipilih dengan efek riak yang bagus ini.

Untuk kasus penggunaan ini ada ?selectableItemBackgroundatribut tema yang dapat Anda gunakan untuk latar belakang Anda (terutama dalam daftar).
Ini akan menambahkan riak standar platform (atau beberapa daftar status warna pada <21) dan akan menggunakan warna tema Anda saat ini.

Untuk penggunaan Anda, Anda mungkin hanya menggunakan yang berikut ini:

<Button
    android:id="@+id/sign_in_button"
    style="?android:attr/buttonBarButtonStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Login"
    android:background="?attr/selectableItemBackground" />
                   <!--  /\ that's all -->

Juga tidak perlu menambahkan bobot tata letak jika tampilan Anda adalah satu-satunya dan menjangkau seluruh layar

Jika Anda memiliki beberapa gagasan berbeda tentang bagaimana seharusnya latar belakang Anda, Anda harus membuat sendiri kustom yang dapat digambar, dan mengelola warna serta menyatakan di sana.

Jawaban ini disalin dari Pertanyaan: Bagaimana cara menghapus padding (atau margin?) Dengan benar di sekitar tombol di Android?

Mohammad7G
sumber
0

Setelah jam menggali sekitar beberapa jawaban yang saya akhirnya menemukan solusi yang tidak menggunakan elemen yang berbeda, memanipulasi minHeightatau minWidth, atau bahkan membungkus Buttondi sekitar RelativeLayout.

<Button
    android:foreground="?attr/selectableItemBackground"
    android:background="@color/whatever" />

Bagian utama yang bisa diambil di sini adalah latar depan dan bukan latar belakang seperti yang ditentukan oleh banyak jawaban. Mengubah latar belakang itu sendiri selectableItemBackgroundhanya akan menimpa perubahan yang Anda buat pada warna / latar belakang tombol, jika ada.

Mengubah latar depan memberi Anda yang terbaik dari kedua dunia: singkirkan bantalan "tak terlihat" dan pertahankan desain kancing Anda.

Altus
sumber
0

Anda dapat menggunakan gaya Tanpa Batas di AppCompatButton seperti di bawah ini. dan gunakan android: background dengan itu.

style = "@ style / Widget.AppCompat.Button.Borderless.Colored"

Kode tombol

<androidx.appcompat.widget.AppCompatButton
        android:id="@+id/button_visa_next"
        android:background="@color/colorPrimary"
        style="@style/Widget.AppCompat.Button.Borderless.Colored"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/spacing_normal"
        android:text="@string/next"
        android:textColor="@color/white"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

Keluaran:

masukkan deskripsi gambar di sini

Shihab Uddin
sumber