android:底部背景阴影的dialog弹出

2019-06-15  本文已影响0人  sunny635533

style 样式:

<style name="BottomDialog">

    <item name="android:windowNoTitle">true

    <item name="android:windowIsFloating">true

    <item name="android:windowEnterAnimation">@anim/push_bottom_in

    <item name="android:windowExitAnimation">@anim/push_bottom_out

    <item name="android:windowContentOverlay">@null

</style>

关键在于Theme.Dialog中的各种属性:

<style name="Theme.Dialog" parent="Theme.AppCompat.Light.Dialog">

    <item name="windowActionBar">false</item>

    <!-- 没有标题栏 -->

    <item name="windowNoTitle">true</item>

    <!--边框-->

    <item name="android:windowFrame">@null</item>

    <!--是否浮现在activity之上-->

    <item name="android:windowIsFloating">true</item>

    <!-- 是否透明 -->

    <item name="android:windowIsTranslucent">true</item>

    <!--除去title-->

    <item name="android:windowNoTitle">true</item>

    <!-- 对话框是否有遮盖 -->

    <item name="android:windowContentOverlay">@null</item>

    <!-- 对话框出现时背景是否变暗 -->

    <item name="android:backgroundDimEnabled">true</item>

    <!-- 背景颜色,因为windowBackground中的背景已经写死了,所以这里的设置无效 -->

    <item name="android:colorBackground">@color/background_floating_material_light</item>

    <!-- 着色缓存(一般不用)-->

    <item name="android:colorBackgroundCacheHint">@null</item>

    <!-- 标题的字体样式 -->

    <item name="android:windowTitleStyle">@style/RtlOverlay.DialogWindowTitle.AppCompat</item>

    <item name="android:windowTitleBackgroundStyle">@style/Base.DialogWindowTitleBackground.AppCompat</item>

    <!--对话框背景(重要)  , default = abc_dialog_material_background-->

    <item name="android:windowBackground">@drawable/dialog_bg_custom</item>

    <!-- 动画 -->

    <item name="android:windowAnimationStyle">@style/Animation.AppCompat.Dialog</item>

    <!-- 输入法弹出时自适应 -->

    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>

    <item name="windowActionModeOverlay">true</item>

    <!-- 列表部分的内边距,作用于单选、多选列表 -->

    <item name="listPreferredItemPaddingLeft">20dip</item>

    <item name="listPreferredItemPaddingRight">24dip</item>

    <item name="android:listDivider">@null</item>

    <!-- 单选、多选对话框列表文字的颜色 默认:@color/abc_primary_text_material_light -->

    <item name="textColorAlertDialogListItem">#00ff00</item>

    <!-- 单选、多选对话框的分割线 -->

    <!-- dialog中listView的divider 默认:@null-->

    <item name="listDividerAlertDialog">@drawable/divider</item>

    <!-- 单选对话框的按钮图标 (默认不为null)-->

    <item name="android:listChoiceIndicatorSingle">@android:drawable/btn_radio</item>

    <!-- 对话框整体的内边距,但不作用于列表部分 默认:@dimen/abc_dialog_padding_material-->

    <item name="dialogPreferredPadding">20dp</item>

    <item name="alertDialogCenterButtons">true</item>

    <!-- 对话框内各个布局的布局文件-->

    <item name="alertDialogStyle">@style/AlertDialogStyle</item>

</style>

自定义Dialog类:

package com.hongshi.wuliudidi.czrestruct.dialog;

import android.app.Dialog;

import android.content.Context;

import android.view.Gravity;

import android.view.View;

import android.view.Window;

import android.view.WindowManager;

import android.widget.TextView;

import com.aigestudio.wheelpicker.WheelPicker;

import com.hongshi.wuliudidi.R;

import java.util.ArrayList;

import java.util.Calendar;

/**

* @author sunny

* @version ${VERSION}

* @created 2019/6/14

* @title

* @description

* @changeRecord 2019/6/14 modify  by sunny

*

* 选择性别的弹框

*/

public class SexWheelDialogextends Dialogimplements View.OnClickListener {

private WheelPickersexPicker;

    private TextViewcancelView, titleView, okView;

    /**

* 选择的天索引

*/

    private int sexSelectIndex =0;

    private ArrayListsexList =new ArrayList<>();

    public interface SexWheelSelectBack {

void select(String sex);

    }

private SexWheelSelectBackcallback;

    public SexWheelDialog(Context context) {

super(context, R.style.BottomDialog);

        initView();

    }

public SexWheelDialog(Context context, int theme) {

super(context, theme);

        initView();

    }

public void initView() {

setContentView(R.layout.rz_dialog_sex);

        sexPicker = findViewById(R.id.dialog_sex_picker);

        okView = findViewById(R.id.dialog_date_commit);

        cancelView = findViewById(R.id.dialog_date_close);

        titleView = findViewById(R.id.dialog_date_title);

        initDailogArr();

        initData();

        initEvent();

    }

private void initDailogArr() {

setCanceledOnTouchOutside(false);

        Window window = getWindow();

        WindowManager.LayoutParams layoutParams = window.getAttributes();

        layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;

        window.setAttributes(layoutParams);

        window.setGravity(Gravity.BOTTOM);

        window.setWindowAnimations(R.style.BottomDialog);//AnimBottom

    }

@Override

    public void onClick(View view) {

switch (view.getId()) {

case R.id.dialog_date_close:

dismiss();

break;

            case R.id.dialog_date_commit:

if (this.callback !=null) {

dismiss();

                    String sex =sexList.get(sexSelectIndex);

                    callback.select(sex);

                }

break;

        }

}

private void initEvent() {

sexPicker.setOnItemSelectedListener(new WheelPicker.OnItemSelectedListener() {

@Override

            public void onItemSelected(WheelPicker picker, Object data, int position) {

sexSelectIndex = position;

            }

});

        cancelView.setOnClickListener(this);

        okView.setOnClickListener(this);

    }

public void initData() {

sexList =new ArrayList<>();

        sexList.add("男");

        sexList.add("女");

        sexPicker.setData(sexList);

        sexPicker.setSelectedItemPosition(sexSelectIndex);

    }

public void showDateDialog(SexWheelSelectBack callback) {

this.callback = callback;

        show();

    }

public void showDateWheelDiaolog(String title, String sexStr, SexWheelSelectBack callback) {

titleView.setText(title);

        this.callback = callback;

        for (int i =0; i

if (sexList.get(i).trim() == sexStr) {

sexSelectIndex = i;

return;

            }

}

sexPicker.setSelectedItemPosition(sexSelectIndex, true);

        show();

    }

}

上一篇下一篇

猜你喜欢

热点阅读