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

Android 實現京東風格側邊篩選欄:SlidingMenu 與 PopupWindow 方案對比

     編輯:程式設計綜合問答

需求

點擊按鈕從右側滑出半透明覆蓋層,包含篩選選項,確定後更新主頁數據,不完全遮蓋主 Activity。

方案對比

方案優點缺點適用場景
SlidingMenu (Library)成熟、手勢滑動、邊緣觸發、Activity 級切換庫已停維、侵入性強、需繼承特定基類老項目快速接入
PopupWindow輕量、API 原生、可任意錨點、動畫可控需手動處理遮罩、返回鍵、軟鍵盤遮擋簡單彈出面板
BottomSheetDialogFragment (推薦)Material Design 風格、自帶拖拽手柄、狀態管理、生命週期安全需 Support Library 23.2+、佈局需符合規範現代 App 篩選/分享/操作表
Navigation Drawer (DrawerLayout)系統級導航模式、手勢/圖標雙觸發、多頁面切換佔據整個側邊、不適合臨時篩選主導航菜單

BottomSheetDialogFragment 實現要點

public class FilterBottomSheet extends BottomSheetDialogFragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.filter_sheet, container, false);
        // 設置 RecyclerView、確定按鈕點擊
        view.findViewById(R.id.btnConfirm).setOnClickListener(v -> {
            // 通過接口回調傳遞篩選條件
            ((FilterListener)getActivity()).onFilterConfirmed(collectConditions());
            dismiss();
        });
        return view;
    }
    
    @Override
    public void onStart() {
        super.onStart();
        // 設置彈出高度為屏幕 70%
        Dialog dialog = getDialog();
        if (dialog != null) {
            FrameLayout bottomSheet = dialog.findViewById(com.google.android.material.R.id.design_bottom_sheet);
            BottomSheetBehavior.from(bottomSheet).setPeekHeight((int)(Resources.getSystem().getDisplayMetrics().heightPixels * 0.7));
        }
    }
}

調用方式

new FilterBottomSheet().show(getSupportFragmentManager(), "FilterBottomSheet");
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved