首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android Button 5.0+ 底部陰影/重影問題:Material Design 風格導致,解決方案三選一

     編輯:程式設計疑難解答

現象

Android 5.0 (API 21) 及以上,`Button` 默認帶有 **Material Design 陰影(StateListAnimator + elevation)**,視覺上呈現「底部重影/立體感」,與設計稿不符。

三種解決方案

1. XML 佈局中關閉陰影(最簡單)

<Button
    android:id="@+id/btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:stateListAnimator="@null" />  <!-- 關鍵:禁用狀態動畫/陰影 -->

2. 代碼中動態關閉

Button btn = findViewById(R.id.btn);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    btn.setStateListAnimator(null);
    // 或 btn.setElevation(0); // 僅移除陰影高度,保留點擊動畫
}

3. 主題/樣式統一覆蓋(全局一致)

<!-- res/values-v21/styles.xml -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:buttonStyle">@style/FlatButton</item>
</style>

<style name="FlatButton" parent="Widget.AppCompat.Button">
    <item name="android:stateListAnimator">@null</item>
    <item name="android:background">@drawable/btn_bg_flat</item> <!-- 自定義無陰影背景 -->
</style>

對比總結

方案適用場景副作用
`stateListAnimator="@null"`單個按鈕快速修復無點擊縮放/顏色變化動畫
代碼 `setStateListAnimator(null)`動態創建/條件控制同上
主題統一覆蓋整個 App 風格扁平化需提供自定義背景 drawable

補充:自定義扁平背景 `btn_bg_flat.xml`

<selector xmlns:android="https://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape><solid android:color="#DDDDDD"/></shape></item>
    <item android:state_focused="true">
        <shape><solid android:color="#EEEEEE"/></shape></item>
    <item>
        <shape><solid android:color="#FFFFFF"/></shape></item>
</selector>

**Material Design 陰影是 API 21+ 默認行為,`stateListAnimator="@null"` 一行即可消除,全局風格建議主題覆蓋。**

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved