webentwicklung-frage-antwort-db.com.de

So entfernen Sie Rand/Schatten von den Lollipop-Schaltflächen

Die Schaltflächen sehen für API <21 gut aus. Die +21-Versionen erstellen jedoch diesen Rand oder Schatten, der im Bild unten angezeigt wird. Wie entferne ich es, ohne das gesamte Lochdesign zu ändern, aber eine Stilvariable festzulegen?

enter image description here

Dieses farbige Bild könnte klarer sein. Es gibt eine Art Rahmen um die Knöpfe.enter image description here

Mein Knopfstil ist folgendermaßen definiert:

<style name="buttonTransparent" parent="Base.TextAppearance.AppCompat.Button">
        <item name="Android:background">#00000000</item>
        <item name="Android:textColor">@drawable/button_text_blue</item>
        <item name="Android:textSize">18dp</item>
        <item name="Android:textAllCaps">false</item>
        <item name="Android:minHeight">45dp</item>
    </style>

<style name="buttonLargeWhite" parent="buttonTransparent">
        <item name="Android:background">#FFF</item>
        <item name="Android:layout_marginTop">10dp</item>
    </style>
37
7heViking

Lollipop hat eine unangenehme kleine Funktion namens stateListAnimator, die die Höhen auf Schaltflächen verarbeitet und zu Schatten führt.

Entfernen Sie das stateListAnimator, um die Schatten zu beseitigen.

Sie haben mehrere Möglichkeiten, dies zu tun:

Java:

button.setStateListAnimator(null);

Kotlin:

button.stateListAnimator = null

oder in Ihren Layout-XMLs:

<Button
...
Android:stateListAnimator="@null" 
....
/> 
157
daemmie

Die beste und einfachste Methode, die ich verwende, ist das Einstellen des Stilattributs auf Button 

<Button
...
style="?android:attr/borderlessButtonStyle"
....
/> 

kann jemand in der Zukunft brauchen.

32
WonderSoftwares

Es gibt bereits einen Stil, den Sie nutzen können, um die Ränder nicht zu haben.

sich bewerben 

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

zu Ihrem Artikel, um die Ränder zu entfernen

6
Olivier Mercier

Ich habe dieses global durch Einstellung von Android:stateListAnimator="@null" in Resources\values\styles.xml behoben:

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <style name="AppTheme" parent="AppTheme.Base">
    </style>
    <style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="Android:buttonStyle">@style/NoShadowButton</item>
    </style>
    <style name="NoShadowButton" parent="Android:style/Widget.Button">
        <item name="Android:stateListAnimator">@null</item>
    </style>
</resources>

Und voila die Schatten sind für immer verschwunden :)

6
Korayem

"Schatten" -Effekt wird hinzugefügt bei Lollipop Appcompat-Design

fügen Sie die folgende Zeile in res/values-v21/styles.xml hinzu, um den Standardschatten zu entfernen

Themenebene:

<item name="Android:buttonStyle">@style/Widget.AppCompat.Button.Borderless</item>

XML-Layout:

Android:stateListAnimator="@null"

Java:

setStateListAnimator(null);

Kotlin:

stateListAnimator = null
3

Problem

  1. Ab Android v21 wurde für alle Schaltflächen standardmäßig Rand hinzugefügt.

    <!-- Bordered ink button -->
    <style name="Widget.Material.Button">
         <item name="background">@drawable/btn_default_material</item>
         <item name="textAppearance">?attr/textAppearanceButton</item>
         <item name="minHeight">48dip</item>
         <item name="minWidth">88dip</item>
         <item name="stateListAnimator">@anim/button_state_list_anim_material</item>
         <item name="focusable">true</item>
         <item name="clickable">true</item>
         <item name="gravity">center_vertical|center_horizontal</item>
    </style>
    
    • Die Eigenschaft " stateListAnimator " ist diejenige, die das Problem verursacht.

Lösung

  1. Legen Sie in unserem Anwendungsthema den Schaltflächenstil fest, um den Standardrahmen zu entfernen (die Android-Unterstützungsbibliothek selbst stellt den entsprechenden Stil bereit).

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
         <!-- From Android-v21 - Border has been added by default, hence we are removing it. -->
         <item name="Android:buttonStyle">@style/Widget.AppCompat.Button.Borderless</item>
    </style>
    
1
Vasanth

Ich würde vorschlagen, dass Sie den Schatten einfach vollständig entfernen, indem Sie die Höhe auf nichts setzen. Da Sie bereits über einen XML-Stil verfügen (fügen Sie diesen hinzu, um diesen universell zu verwenden), oder fügen Sie dieses Attribut Ihrer XML-Sichtdefinition hinzu

Android:elevation="0dp"
1
Booger

Schaltflächen in Android verfügen über die Eigenschaft statelistAnimator. Wenn Sie also Null angeben, können Sie den Rand der Schaltfläche entfernen

Android:stateListAnimator="@null"

Wenn Sie dies programmgesteuert in Kotlin durchführen möchten, können Sie dies tun

button.stateListAnimator = null
0
Nari Kim Shin

in xml können wir verwenden

Android:stateListAnimator="@null"
0
Ankit Tomer