網上關於此類的話題很多,特別是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關係,這樣就一目瞭然了。