使用Dialog作为弹框来和用户交互,从底部弹出固定在底部时,让弹出框宽度匹配屏幕宽度,使用Dialog,AlertDialog都可以实现,下面分别贴出两种方法的实现代码,先上一个效果图,如果需要宽度匹配屏幕宽度,个人建议使用Dialog.
方法一、Dialog
package com.cool.hello.alertDialog;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import com.cool.hello.R;
public class DialogActivity extends AppCompatActivity {
private Dialog dialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_alert_dialog);
initAlertDialog();
}
private void initAlertDialog() {
if(dialog == null) {
dialog = new Dialog(this, R.style.dialog);
// dialog.setCancelable(false);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.layout_dialog);
Window window = dialog.getWindow();
window.setGravity(Gravity.BOTTOM);
window.setWindowAnimations(R.style.AnimDialog);
WindowManager manager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
manager.getDefaultDisplay().getMetrics(dm);
WindowManager.LayoutParams lp = window.getAttributes();
lp.width = dm.widthPixels;
window.setAttributes(lp);
}
}
public void show(View view) {
dialog.show();
}
}
主题
R.style.dialog
<style name="dialog" parent="android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowBackground">@color/background</item>
</style>
动画资源
R.style.AnimDialog <style name="AnimDialog">
<item name="android:windowEnterAnimation">@anim/dialog_enter</item>
<item name="android:windowExitAnimation">@anim/dialog_exit</item>
</style>
dialog_enter.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator">
<translate
android:duration="@android:integer/config_shortAnimTime"
android:fromYDelta="100%p"
android:toYDelta="0" />
<alpha
android:duration="@android:integer/config_shortAnimTime"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
</set>
dialog_exit.xml
<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator">
<translate
android:duration="@android:integer/config_shortAnimTime"
android:fromYDelta="0"
android:toYDelta="100%p" />
<alpha
android:duration="@android:integer/config_shortAnimTime"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
</set>
方式二、AlertDialog
初始化
protected AlertDialog companyDialog;
private void initAlertDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyAlertDialog);
View itemView = LayoutInflater.from(this).inflate(R.layout.layout_comany_list, null);
mCompanyRecyclerView = (LRecyclerView) itemView.findViewById(R.id.rv_company);
builder.setView(itemView);
companyDialog = builder.create();
}
显示
protected void showAlertDialog() {
companyDialog.show();
Window window = companyDialog.getWindow();
WindowManager.LayoutParams params = window.getAttributes();
window.setGravity(Gravity.BOTTOM);
params.width = window.getWindowManager().getDefaultDisplay().getWidth();
window.setWindowAnimations(R.style.AnimDialog);
window.setAttributes(params);
}
主题
R.style.MyAlertDialog <style name="MyAlertDialog" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="android:windowFrame">@null</item><!--移除边框-->
<item name="android:windowNoTitle">true</item><!--去除顶部标题栏-->
<item name="android:windowIsTranslucent">true</item><!--窗体透明-->
<item name="android:background">@android:color/white</item><!--背景透明-->
<item name="android:windowBackground">@android:color/transparent</item><!--窗体背景透明-->
<item name="android:windowIsFloating">true</item><!--窗体是否浮动-->
<item name="android:backgroundDimEnabled">true</item><!--背景是否昏暗-->
<item name="android:backgroundDimAmount">0.6</item><!--昏暗数量-->
<item name="android:layout_marginLeft">-10dp</item>
<item name="android:layout_marginRight">-10dp</item>
<item name="android:layout_marginBottom">-3dp</item>
</style>
动画资源同上