2017-06-13 3 views
0

Je suis en train de construire un bouton Android avec des coins arrondis. Mais le long des coins arrondis (en bas à gauche), il y a une ombre de couleur grise non désirée.Bouton Android avec des coins arrondis, effet d'ondulation et sans ombre

rounded corner button

Voici mon code:

drawable/my_button.xml

<?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape android:shape="rectangle"> 
     <stroke android:width="1dp" android:color="#ffa6c575" /> 
     <solid android:color="#ffa6c575"/> 
     <corners android:radius="15dp" /> 
     </shape> 
    </item> 
    </selector> 

Puis, dans la mise en page fichier xml, j'ai:

<LinearLayout 
    <Button 
    android:id="@+id/buy_button" 
    android:layout_width="0dp" 
    android:layout_weight="1" 
    android:layout_height="35dp" 
    android:layout_gravity="center" 
    android:background="@drawable/my_button" 
    android:textColor="@android:color/white" 
    android:text="BUY" /> 

    <View 
    android:layout_width="10dp" 
    android:layout_height="match_parent" 
    android:background="@android:color/transparent" > 
    </View> 

    <Button 
    android:id="@+id/sell_button" 
    android:layout_width="0dp" 
    android:layout_weight="1" 
    android:layout_height="35dp" 
    android:layout_gravity="center" 
    android:background="@drawable/my_button" 
    android:textColor="@android:color/white" 
    android:text="SELL" /> 

</LinearLayout> 

1) Comment puis-je me débarrasser de la ombre supplémentaire de couleur grise autour des coins arrondis (en bas à gauche & coin droit)?

2) Le bouton a un effet d'ondulation par défaut. Comment puis-je conserver l'effet d'entraînement par défaut?

+0

Button a l'ombre par défaut. Vous pouvez changer à TextView qui est une classe de base de Button et a moins de valeurs par défaut. – Emma

+0

Pour un problème de bordure redondante, je le résous avec 'style ="? Android: attr/borderlessButtonStyle "'. Quelqu'un a une idée de comment récupérer l'effet d'entraînement par défaut? –

Répondre

4

J'ai finalement résolu le problème avec le code ci-dessous. Cela permet d'obtenir des coins arrondis pour le bouton. En outre, pour Android Version> = V21, il utilise l'effet d'entraînement. Pour la version antérieure d'Android, la couleur du bouton change lorsqu'il est cliqué, en fonction de android:state_pressed, android:state_focused, etc.

Dans layout xml fichier:

<Button 
    style="?android:attr/borderlessButtonStyle" 
    android:id="@+id/buy_button" 
    android:layout_width="0dp" 
    android:layout_weight="1" 
    android:layout_height="match_parent" 
    android:gravity="center" 
    android:background="@drawable/green_trading_button_effect" 
    android:textColor="@android:color/white" 
    android:text="BUY" /> 

Pour bouton effet onclick d'entraînement (Android> = v21):

drawable-v21/green_trading_button_effect.xml

<?xml version="1.0" encoding="utf-8"?> 
<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
    android:color="@color/ripple_material_dark"> 

    <item android:id="@android:id/mask"> 
     <shape android:shape="rectangle"> 
      <solid android:color="@android:color/white" /> 
      <corners android:radius="5dp" /> 
     </shape> 
    </item> 

    <item android:drawable="@drawable/green_trading_button" /> 
</ripple> 

Pour version antérieure Android, il suffit de changer la couleur de fond pendant onclick :

drawable/green_trading_button_effect.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:drawable="@drawable/green_trading_button_selected" /> 
    <item android:state_focused="true" android:drawable="@drawable/green_trading_button_selected" /> 
    <item android:state_selected="true" android:drawable="@drawable/green_trading_button_selected" /> 
    <item android:drawable="@drawable/green_trading_button" /> 
</selector> 

drawable/green_trading_button.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 

    <solid android:color="#ffa6c575"/> 
    <!-- rounded corners --> 
    <corners android:radius="5dp" /> 
</shape> 

drawable/green_trading_button_selected.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 

    <solid android:color="#ffc5dca8"/> 
    <!-- corners corners --> 
    <corners android:radius="5dp" /> 
</shape> 
0

Essayez dans votre code

Button buyButton = (Button) findViewById(R.id.buy_button); 
Button sellButton = (Button) findViewById(R.id.sell_button); 

hideShadow(buyButton); 
hideShadow(sellButton); 


public void hideShadow(Button button) { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     button.setElevation(0); 
    } 
} 
+0

Je préfère la solution en XML, de toute façon merci! –

1

Essayez de régler dans votre xml. Cela a fonctionné pour moi.

style="?android:attr/borderlessButtonStyle" 

En outre, si vous ciblez niveau de l'API 21 et ci-dessus, vous pouvez utiliser

android:stateListAnimator="@null" 

Ce lien a plus de réponses How to remove button shadow (android)

+0

'style ="? Android: attr/borderlessButtonStyle "' fonctionne aussi, merci! –

+0

pas de problème. Content d'avoir aidé –

1

Dans votre fichier drawable faire un fichier comme celui-ci:

button_background.xml:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle"> 
    <corners 
     android:bottomRightRadius="15dp" 
     android:topRightRadius="15dp" 
     android:bottomLeftRadius="15dp" 
     android:topLeftRadius="15dp"/> 
    <solid android:color="@color/blue_500" /> 
</shape> 

Augmentez le rayon pour le rendre plus incurvé.

Et dans votre XML pour le bouton, donner de style sans marge bouton et arrière-plan que vous avez fait comme dans le top:

<Button 
    android:id="@+id/task_action_btn" 
    style="@style/Base.Widget.AppCompat.Button.Borderless" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:background="@drawable/button_background" 
    android:textAppearance="@style/Base.TextAppearance.AppCompat.Body1" 
    android:textColor="@android:color/white" /> 
+0

'style =" @ style/Base.Widget.AppCompat.Button.Borderless "' fonctionne, merci! –