2017-06-13 131 views
0

我想構建帶有圓角的Android按鈕。但沿着圓角(右下角的左下角&),它周圍有不需要的灰色陰影。Android按鈕,圓角,漣漪效應,沒有陰影

rounded corner button

這裏是我的代碼:

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> 

然後在佈局xml文件中,我有:

<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)我怎樣才能擺脫圓角附近多餘的灰色陰影(左下角&右上角)?

2)按鈕有默認的連鎖效應。我如何維持默認的連鎖效應?

+0

按鈕默認的影子。您可以更改爲TextView,它是Button的基類,具有較少的默認值。 – Emma

+0

對於多餘的邊框問題,我用'style =「?android:attr/borderlessButtonStyle」'解決了它。任何人都有任何想法如何恢復默認的連鎖反應? –

回答

4

我最後用下面的代碼解決了這個問題。這實現了按鈕的圓角。另外,對於Android版本= V21,它使用連鎖效應。對於早期的Android版本,點擊時按鈕顏色會發生變化,基於android:state_pressed, android:state_focused等。

layout xml文件:

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

對於按鈕的onclick連鎖反應(機器人> = 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> 

對於較早Android版本,在此期間的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

代碼試試這個

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

我更喜歡xml解決方案,無論如何謝謝! –

1

嘗試在你的XML設置此。這對我有效。

style="?android:attr/borderlessButtonStyle" 

此外,如果你的目標API等級21以上就可以使用

android:stateListAnimator="@null" 

此鏈接有多個答案How to remove button shadow (android)

+0

'style =「?android:attr/borderlessButtonStyle」'也可以,謝謝! –

+0

沒問題。很高興我幫助 –

1

在你繪製的文件作出這樣的文件:

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> 

增加半徑使其更加彎曲。

而在你的XML的按鈕,給風格無邊界按鈕和背景,你做它喜歡在上面:

<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」'作品,謝謝! –