Android'de düğmelerin etrafındaki dolgu nasıl kaldırılır?


186

Android uygulamamda şu düzen var:

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

Önizlemede ve telefonda şöyle görünür:

Alt alandaki düğmede görebileceğiniz gibi, orada bir miktar dolgu var.

Bundan nasıl kurtulabilirim ve düğmenin alt alanı tamamen doldurmasına izin verebilirim?


6
DATerre'nin cevabı iki yıldır doğru. Bunu böyle işaretleyebilir misiniz?
JohnnyLambada

1
Bu soru, daha iyi bir başlık için düzenleme gerektiriyor. Soruyu gerçekten cevaplamadığı halde Google Arama'daki ilk sonuç oldu.
SOFe

Yanıtlar:


435

Benim için sorun, bazı Android temalarında minHeight ve minWidth olarak ortaya çıktı.

Düğme öğesine şunu ekleyin:

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

Veya düğmenizin tarzında:

<item name="android:minHeight">0dp</item>
<item name="android:minWidth">0dp</item>

5
Bazı tuhaf dolgu davranışlarıyla değil minHeight'la uğraştığımı fark edene kadar bir süre aldı.
Pijusn

7
Bu cevabın aslında asıl soruyu cevapladığını sanmıyorum. Ama yine de karşılaştığım için memnunum çünkü Buttonkurduktan sonra bile neden bu kadar yer kapladığını anlayamadım android:background="@null". Aslında Buttonbireyin varsayılan stil sorumludur çok iyi bir ucu.
Tony Chan

Hem android kullanmanız önemlidir: minHeight = "0dp" android: minWidth = "0dp" ve bunlardan sadece biri değil.
Ricardo

Bu, Android Nougat'taki düğmeden yuvarlatılmış köşe ve dalgalanma efektini kaldırır, bu davranışa neyin neden olabileceği hakkında bir fikriniz var mı?
rraallvv

Bu yanıt, satırlara / sütunlara sığacak daha fazla düğme almaya çalıştığımda, çılgına dönecek metin üzerinde otomatik boyut seçeneklerine sahip düğmeler içeren bir GridLayout ile ilgili bir sorunu çözdü.
Bulmam

74

Çözümüm insetTop ve insetBottom özelliklerine 0 olarak ayarlandı.

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

1
Sorunu benim için de çözen bu oldu! Teşekkürler!
SPM

1
onun için çalışıyor
Ankit Saini

1
Teşekkürler, Benim için çalıştı
khushbu

46

Bu dolgu değil, arka plandaki düğmenin etrafındaki gölge çekilebilir. Kendi arka planınızı oluşturun ve kaybolacaktır.


6
Yaptım. yok olmadı.
hasan

Boyutu nasıl ölçülebilir?
Iman Akbari

İşte bu, @Behr, arka planı düğmenin rengine dönüştürüyor
Ramon

Arka plan
Fruit

22

-veAşağıdaki gibi kenar boşlukları için değerleri kullanmaya çalışmak geçici bir çözüm olabilir :

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

O alanı yok edecek. Yani, uygun dipdeğeri seçebilirsin , bu da onu ortadan kaldırır. Benim için çalıştı. Umarım sizin için çalışır.


4
Bu çözümü kullanırken dikkatli olurum. Yaptığı şey sadece negatif kenar boşlukları kullanarak düğme arka planını (sınır + gölgeler) gizlemek. Stil değişiklikleri nedir ve border + shadow 5dp'den daha fazlasını alır? Güvenli tarafta olmak için Delyan / Casey Murray çözümünü tercih ederim.
lenrok258

Ayrıca, negatif kenar boşlukları Android'de resmi olarak desteklenmediği için ben de bundan kaçınırım
Tim Kist

14

Açma / kapatma düğmesi çevresindeki dolguyu kaldırmak için minWidth ve minHeight 0dp ayarlamamız gerekir.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"
        />

çekilebilir dosyanızı aşağıdaki gibi düğme özelliğine ayarlayın: android:button="@drawable/toggle_selector"

Aşağıda benim toggle_selecter.xmldosyam

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

9

Android'de yeniyim ama benzer bir durumum vardı. @Delyan'ın önerisini yaptım ve xml düzen dosyasında android: background = "@ null" kullandım.


7

Üst ve Alt dolguyu çıkarmak için

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

Sol ve Sağ dolguyu çıkarmak için

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


6

Aynı sorunu yaşadım ve düğmenin arka plan renginden kaynaklanıyor gibi görünüyor . Arka plan rengini başka bir renge değiştirmeyi deneyin, örneğin:

android:background="@color/colorActive"

ve çalışıp çalışmadığını görün. Daha sonra düğmenin kullanmasını istiyorsanız bir stil tanımlayabilirsiniz .


Bu, düğmenin vurgulama / animasyon özelliğini kaldırır.
Altus

4

Bir dolgu değil, ya da arka planın gölgesi ya da minHeightve ile ilgili bir sorun minWidth.

Yine de güzel dalgalanmanın etkilenmesini istiyorsanız, aşağıdakileri kullanarak kendi düğme stilinizi yapabilirsiniz ?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>

Ve düğmeye uygulayın:

<Button 
    style="@style/Widget.AppTheme.MyCustomButton"
    ... />

2

Dolgu, kenar boşluğu veya mini yükseklik / genişlik gibi görünmüyor. android:background="@null"Düğmenin ayarlanması dokunma animasyonunu kaybeder, ancak arka planın herhangi bir şeye ayarlanması o kenarlığı düzeltir.


Şu anda ile çalışıyorum:

minSdkVersion 19
targetSdkVersion 23

1

Düğmenize özel bir arka plan verin: @ drawable / material_btn_blue


0

İle de yapabilirsiniz layout_width(height) parametrelerle .

Örneğin android:layout_height="18dp"kod ile üst ve alt alanı sildim .


0

Standart bir düğmenin tam genişlikte kullanılması gerekmemektedir , bu yüzden bunu deneyimliyorsunuz.

Arka fon

Eğer bir göz varsa , Malzeme Tasarımı - Düğme Stili Bir düğme 48dp yükseklik tıklamayla alan vardır, ancak için ... nedense yüksekliğinin 36dp olarak görünecektir göreceksiniz.

Bu, düğmenin tüm alanını kaplamayacak olan arka plan anahattıdır.
Köşeleri yuvarlatılmış ve bazı dolgulara sahiptir ve kendi başına tıklanabilir olması, içeriğini sarması ve ekranın altındaki tüm genişliği kapsamaması gerekir.

Çözüm

Yukarıda belirtildiği gibi, istediğiniz farklı bir arka plan . Standart bir düğme değil, bu güzel dalgalanma efektine sahip seçilebilir bir öğe için arka plan.

Bu kullanım durumunda ?selectableItemBackground, arka planlarınız için (özellikle listelerde) kullanabileceğiniz tema özelliği vardır.
Bir platform standart dalgalanması (veya <21'de bazı renk durumu listesi) ekler ve mevcut tema renklerinizi kullanır.

Kullanıcı tabanınız için aşağıdakileri kullanabilirsiniz:

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

Görünümünüz tek ekransa ve tüm ekranı kaplıyorsa, düzen ağırlıkları eklemenize de gerek yoktur.

Arka planınızın neye benzemesi gerektiği konusunda farklı bir fikriniz varsa, kendiniz özel bir çekilebilir oluşturmak ve orada renk ve durumu yönetmeniz gerekir.

Bu cevap Soru'dan kopyalandı : Android'deki düğmelerin etrafındaki dolgu (veya kenar boşluğu?) Nasıl düzgün bir şekilde kaldırılır?


0

Etrafında birden çok yanıt kazma saat sonra nihayet farklı bir elemanını kullanmak manipüle etmeyen bir çözüm buldu minHeightya minWidth, hatta sarma Buttonetrafında RelativeLayout.

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

Buradaki ana paket, cevapların çoğunun şart koştuğu gibi arka plan yerine ön planın ayarlanmasıdır. Arka planın kendisini değiştirmek selectableItemBackground, yalnızca düğmenin rengi / arka planında yaptığınız değişikliklerin üzerine yazacaktır.

Ön planın değiştirilmesi size her iki dünyanın en iyisini verir: "görünmez" dolgudan kurtulun ve düğmenizin tasarımını koruyun.


0

AppCompatButton'da Kenarlıksız stili aşağıdaki gibi kullanabilirsiniz . ve android kullanın : onunla arka plan .

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

Düğme kodu

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

Çıktı:

resim açıklamasını buraya girin

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.