web-dev-qa-db-ja.com

Lollipopボタンから境界線/影を削除する方法

Api <21の場合、ボタンは正常に見えます。ただし、+ 21バージョンでは、下の画像に示されているこの境界線または影が作成されます。穴のテーマを変更せずにスタイル変数を設定せずにそれを取り除くにはどうすればよいですか?

enter image description here

この色付きの画像の方がはっきりしているかもしれません。ボタンの周りには何らかの境界線があります。 enter image description here

私のbuttonsstyleはこのように定義されています:

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

LollipopにはstateListAnimatorと呼ばれる厄介な小さな機能があり、ボタンの標高を処理し、影につながります。

stateListAnimatorを削除して、影を取り除きます。

これを行うには、複数のオプションがあります。

Java:

button.setStateListAnimator(null);

Kotlin:

button.stateListAnimator = null

またはレイアウトxmlで:

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

私が使用している最も簡単な方法は、スタイル属性をボタンに設定することです

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

将来必要になるかもしれません。

37
WonderSoftwares

ボーダーがないように活用できるスタイルがすでにあります。

適用する

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

あなたのアイテムにボーダーを削除します

8
Olivier Mercier

「シャドウ」エフェクトがLollipop Appcompatテーマに追加されます

res/values-v21/styles.xmlに次の行を追加して、デフォルトのシャドウを削除します

テーマレベル:

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

xmlレイアウト:

Android:stateListAnimator="@null"

Java:

setStateListAnimator(null);

Kotlin:

stateListAnimator = null
6

これを修正しましたグローバルAndroid:stateListAnimator="@null"Resources\values\styles.xmlを設定することで:

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

そして出来上がった影は永久に消えてしまった:)

6
Korayem

AndroidのボタンにはstatelistAnimatorプロパティがあるため、nullと宣言することでボタンの境界線を削除できます

Android:stateListAnimator="@null"

問題

  1. From Android v21、すべてのボタンにボーダーがデフォルトで追加されました。

    <!-- 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>
    
    • プロパティ "stateListAnimator"が問題の原因です。

ソリューション

  1. アプリケーションテーマでは、ボタンのスタイルを設定してデフォルトの境界線を削除します(Androidサポートライブラリ自体がスタイルを提供します)。

    <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

エレベーションを何も設定せずに、シャドウを完全に削除することをお勧めします。既にXMLスタイルがあるため(これを追加してこれを汎用的に使用する)、またはこの属性をXMLビュー定義に追加することができます

Android:elevation="0dp"
1
Booger

xmlで使用できます

Android:stateListAnimator="@null"
1
Ankit Tomer

Kotlinでプログラムでこれを行いたい場合は、次のことができます。

button.stateListAnimator = null
0
Nari Kim Shin