android 窗口圆角

网上关于此类的话题很多,特别是Dialog显示圆角问题。下面首先给出两个结论:
1.所有的View都是矩形的,即使设置了圆角依旧显示矩形(window非透明背景便于用户观察)
2.圆角是针对Window的,并非View
3.圆角实现方法即:dialog.getWindow().setBackgroundDrawableResource()

所以当我们为非透明window的View设置圆角的时候会出现如下问题(结论1):
在这里插入图片描述
所以既然圆角是针对window的,那么我们把View的圆角背景去掉,直接设置window的背景(结论2

dialog.getWindow().setBackgroundDrawableResource(R.drawable.round_orner);

在这里插入图片描述

总结设置圆角窗口的方法即:getWindow().setBackgroundDrawableResource

dialog.getWindow().setBackgroundDrawableResource(R.drawable.round_orner);

下面是源码,因为圆角和view无关,所以就不贴关于view的xml。
圆角背景:round_orner.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <!--描边设置-->
    <stroke android:color="@android:color/holo_blue_dark"
        android:width="1px"
        />
        
    <!--填充设置-->
    <solid android:color="@android:color/white"/>

    <!--圆角设置-->
    <corners android:radius="20dp"/>

</shape>
public void onClick(View v) {
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                //builder.setTitle("title");
                //builder.setMessage("message");
                //builder.setIcon(R.mipmap.ic_launcher_round);
                builder.setCancelable(true);

                //View dlg_view = LayoutInflater.from(MainActivity.this).inflate(R.layout.activity_owner_draw,null);
                //View dlg_view = View.inflate(MainActivity.this,R.layout.activity_owner_draw,null);
                View dlg_view = getLayoutInflater().inflate(R.layout.round_corne_layout,null,false);
                //builder.setView(dlg_view);

                AlertDialog dialog  = builder.create();
               //View dlg_view = LayoutInflater.from(MainActivity.this).inflate()
                //getLayoutInflater().inflate(R.layout.activity_main,null,false)
                dialog.setView(dlg_view);
                dialog.getWindow().setBackgroundDrawableResource(R.drawable.round_orner);
                dialog.show();


            }
        });

如果看完之后还是不懂,可以学习一下Activity、View、Window关系,这样就一目了然了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章