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關係,這樣就一目瞭然了。

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