自定义底部显示并没有标题栏的Dialog

需求:

*1. 对话框沉底显示
对话框要想显示,实际上也是通过addView的方法显示的。
params.gravity = Gravity.Bottom

*2. 设置对话框显示自己定义的布局
复写onCreate,然后在里面指定当前你的dialog显示的内容 但是这么做的话,会在上面有一段空白的区域,这段区域是用来放置Title

*3. 去掉title
** 1. 查看系统的dialog使用的是什么属性,在构造方法里面,有这样的一句话

context.getTheme().resolveAttribute(com.android.internal.R.attr.dialogTheme, outValue, true);

**2. 它实际上找的是这个叫做dialogTheme的样式。
**3. 继续跟进系统的Theme样式, 在里面最终找到一个叫做noFrame样式

**4. 拷贝过来,声明自己的样式,然后给构造方法里面指定使用样式即可

一.写一个类继承Dialog

public class LocationStyleDialog extends Dialog {
    private WindowManager mWindowManager;
    private TextView mTitle;
    private ListView mListView;
    private Context mContext;
    private int[] mColors;

    public LocationStyleDialog(Context context) {
//        super(context);
        //设置自己的样式
        this(context, R.style.LocationStyle);

        //获取window显示的属性
        WindowManager.LayoutParams params = getWindow().getAttributes();
        //设置沉底
        params.gravity = Gravity.BOTTOM;
        //再次给属性赋值
        getWindow().setAttributes(params);

        mContext = context;
    }

    protected LocationStyleDialog(Context context, boolean cancelable, OnCancelListener cancelListener) {
        super(context, cancelable, cancelListener);
    }

    public LocationStyleDialog(Context context, int themeResId) {
        super(context,themeResId);

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dialog_view);
        initView();
        initData();
        initListener();
    }

    private void initView() {
        mTitle = (TextView) findViewById(R.id.tv_title);
        mListView = (ListView)findViewById(R.id.lv_list);

    }

    private void initData() {
        String [] mTitles = {
                "半透明","活力橙","卫士蓝","金属灰","苹果绿"
        };

        mColors = new int[]{
                R.drawable.shape_dialog_item01,
                R.drawable.shape_dialog_item02,
                R.drawable.shape_dialog_item03,
                R.drawable.shape_dialog_item04,
                R.drawable.shape_dialog_item05
        };

        LocationStyleAdapter adapter = new LocationStyleAdapter(mContext , mColors, mTitles);
        mListView.setAdapter(adapter);
    }

    public void initListener(){
        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                dismiss();
                dismiss();
                SharedPreUtil.putInt("color" , mColors[position] , mContext);
            }
        });

    }
}

二.在style.xml文件中创建自己的样式

<style name="LocationStyle" parent="Theme.AppCompat.Dialog">
  <item name="android:windowBackground">@color/white</item>
 <item name="android:windowFrame">@null</item>
 <item name="android:windowContentOverlay">@null</item>
 <!--窗口的显示动画风格-->
 <item name="android:windowAnimationStyle">@null</item>
 <!--背景是否是暗淡-->
 <item name="android:backgroundDimEnabled">true</item>
 <!--窗口是否是半透明的-->
 <item name="android:windowIsTranslucent">true</item>
 <!--是否没有标题-->
 <item name="android:windowNoTitle">true</item>
 <!--点击外部是否关闭窗口-->
 <item name="android:windowCloseOnTouchOutside">true</item>
</style>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值