弹出对话框
弹窗的总结有很多,像什么七种格式的弹窗,这里只说自定义布局的弹窗
如果你想让弹窗弹出你自定义的样式来的话,只需一下几个关键步骤:
第一步:
//参数一是这个dialog属于哪个activity
//参数二:
<!-- 对话框样式 -->
<style name="Theme.Light.Dialog" parent="android:style/Theme.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:scrollHorizontally">true</item>
<item name="android:stateNotNeeded">true</item>
</style>
Dialog dialog = new Dialog(activity, R.style.Theme_Light_Dialog);
第二步:
//R.layout.dialog这个就是你定义的弹窗的布局
View dialogView = LayoutInflater.from(activity).inflate(R.layout.dialog,null);
第三步:
dialog.setContentView(dialogView);
dialog.show();
就是这么简单
但是这样做往往还有一个问题,就是宽度不是match而是wrap,即使我们在布局文件中定义的是match,也没用.所以我们还要动态的设置这个dialogView的宽度.
这个步骤在dialog.show()和dialog.setContentView(dialogView)之间.
ViewGroup.LayoutParams layoutParams= dialogView.getLayoutParams();
layoutParams.width=getResources().getDisplayMetrics().widthPixels;
dialogView.setLayoutParams(layoutParams);
弹出对话框还可以通过 下面这种方式实现
public class ChooseNameDialog extends Dialog implements View.OnClickListener{
private IChooseComplete listener;
private String result ;
private Context context;
public ChooseNameDialog(@NonNull Context context,IChooseComplete listener) {
super(context, R.style.BottomDialog2);
this.listener = listener;
this.context = context;
}
@Override
public void show() {
super.show();
/**
* 设置宽度全屏,要设置在show的后面
*/
WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
layoutParams.gravity= Gravity.CENTER;
layoutParams.width= WindowManager.LayoutParams.MATCH_PARENT;
layoutParams.height= WindowManager.LayoutParams.WRAP_CONTENT;
getWindow().getDecorView().setPadding(0, 0, 0, 0);
getWindow().setAttributes(layoutParams);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_name_layout);
}
说明,有的时候希望弹出对话框之后也弹出软键盘,这时可以设置style,
<style name="BottomDialog2" parent="@style/Theme.AppCompat.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:scrollHorizontally">true</item>
<item name="android:stateNotNeeded">true</item>
<item name="android:windowSoftInputMode">stateAlwaysVisible|adjustResize</item>//这个可以保证软键盘在任何时候都能弹出
</style>