zoukankan      html  css  js  c++  java
  • 底部菜单实现(Dialog方案)

    项目中经常会要实现在屏幕底部弹出一个窗口,比如一个分享窗口:

    下面详解实现步骤:

    1.定义布局

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:background="@color/white"
                  android:gravity="center_horizontal"
                  android:orientation="vertical">
    
        <com.piston.usedcar.widget.KiloPiker
            android:id="@+id/kp_car_grad"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:descendantFocusability="blocksDescendants"/>
    
        <TextView
            android:id="@+id/tv_sel_car_grad"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/theme_gray_bg"
            android:gravity="center"
            android:padding="@dimen/common_padding_less"
            android:text="确定"
            android:textColor="@color/theme_gray_text"
            android:textSize="@dimen/text_small"/>
    </LinearLayout>

    2.定义从底部弹出的动画

      a.弹出动画dialog_enter.xml

    <?xml version="1.0" encoding="utf-8"?>
    <translate xmlns:android="http://schemas.android.com/apk/res/android"
               android:duration="300"
               android:fromYDelta="100%p">
    </translate>

      b.退出动画dialog_exit.xml

    <?xml version="1.0" encoding="utf-8"?>
    <translate xmlns:android="http://schemas.android.com/apk/res/android"
               android:duration="300"
               android:toYDelta="100%p">
    </translate>

    3.在styles.xml定义动画样式

        <style name="MyDialogAnimationStyle" parent="android:Animation">
            <item name="@android:windowEnterAnimation">@anim/dialog_enter</item>
            <item name="@android:windowExitAnimation">@anim/dialog_exit</item>
        </style>

    4.防止dialog有边距,以便dialog填充整个屏幕宽度,定义如下样式:

    <style name="common_dialog" parent="@android:style/Theme.Dialog">
            <item name="android:windowBackground">@android:color/transparent</item>
            <item name="android:windowNoTitle">true</item>
    </style>

    5.代码实现:

            View view = LayoutInflater.from(AppContext.getContext()).inflate(R.layout.dialog_bottom_car_grad, null);
            final Dialog dialog = new Dialog(this, R.style.common_dialog);
            dialog.setContentView(view);
            dialog.getWindow().setWindowAnimations(R.style.MyDialogAnimationStyle);
            dialog.show();
    
            final KiloPiker kpCarGrad = (KiloPiker) view.findViewById(R.id.kp_car_grad);
            TextView mViewPengyou = (TextView) view.findViewById(R.id.tv_sel_car_grad);
    
            kpCarGrad.setNumberPickerDividerColor(kpCarGrad, R.color.background_split);
    
            kpCarGrad.setDisplayedValues(CAR_GRAD_ARRAY);
            kpCarGrad.setMaxValue(CAR_GRAD_ARRAY.length - 1);
            kpCarGrad.setMinValue(0);
    
            kpCarGrad.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
                @Override
                public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
                    carGradSelPos = newVal;
                }
            });
    
            mViewPengyou.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (carGradSelPos == 0) {
                        tvSynthCarGrad.setText("优秀车况");
                    } else if (carGradSelPos == 1) {
                        tvSynthCarGrad.setText("良好车况");
                    }
                    dialog.dismiss();
                }
            });
    
    
            // 设置相关位置,一定要在 show()之后
            Window window = dialog.getWindow();
            window.getDecorView().setPadding(0, 0, 0, 0);
            WindowManager.LayoutParams params = window.getAttributes();
            params.width = WindowManager.LayoutParams.MATCH_PARENT;
            params.gravity = Gravity.BOTTOM;
            window.setAttributes(params);

      

  • 相关阅读:
    (OK) Use Android Code to Enable USB Debugging
    add software "mouse cursor" in Android-x86
    Subject: [android-porting] Mouse cursor:issue with dispatchPointer
    BUG实例分析五:binder alloc buf, no vma
    【Manthan, Codefest 18 (rated, Div. 1 + Div. 2) A】Packets
    【ACM-ICPC 2018 南京赛区网络预赛 I】Skr
    【ACM-ICPC 2018 南京赛区网络预赛 A】An Olympian Math Problem
    【AIM Tech Round 5 (rated, Div. 1 + Div. 2) 总结】【题解往前或往后翻,不在这】
    【AIM Tech Round 5 (rated, Div. 1 + Div. 2) A】 Find Square
    【AIM Tech Round 5 (rated, Div. 1 + Div. 2) B】Unnatural Conditions
  • 原文地址:https://www.cnblogs.com/gdpdroid/p/6075167.html
Copyright © 2011-2022 走看看