Comparación del cuadro de diálogo y popupWindow

1. Los mismos dos puntos

1.1 se puede configurar el cuadro de diálogo
1.2 se puede configurar para asumir una variedad de estilos pop

2. La diferencia entre los dos

La diferencia esencial:

De diálogo es un cuadro de diálogo sin bloqueo, el fondo también puede hacer otras cosas cuando AlertDialog pop;
popupWindow está bloqueando el cuadro de diálogo, el programa se abrirá cuando se espera popupWindow, el programa esperará hasta el final de popupWindow, cuando se llama a despedir método pop popupWindow cerrar el programa se llevó a abajo

Otras diferencias:
1.Pop deben establecerse antes de que el ancho de la pantalla y la altura, de diálogo ilimitada
volver 2. Haga clic en cuando, diálogo desaparecerá, respuesta predeterminada Pop (a menos que establezca popup.setFocusable (true))
3.Pop no será por defecto la página Añadir el resto de la capa de máscara y la capa de diálogo predeterminado de Mongolia
4.PopupWindow ningún título, hay un título predeterminado de diálogo
5. pantalla cuando ambos se debe establecer la gravedad. Si no se establece por defecto de diálogo Gravity.CENTER
6. La ambos tienen de fondo por defecto, puede ser proporcionada por un setBackgroundDrawable transparente (nueva nueva ColorDrawable (android.R.color.transparent))
7.Dialog por show () muestra la ventana emergente; Pop por showAtLocation () pop

3. implementación de códigos

Diálogo de alcanzar el fondo del pop

public class BottomDialog extends Dialog implements View.OnClickListener {

    private Context context;
    private TextView tvCall;
    private String name;
    private String phone_number;
    private TextView tv_contact_customer;
    private TextView tv_cancel;

    public BottomDialog(@NonNull Context context, String name, String phone_number, @StyleRes int themeResId){
        super(context, themeResId);
        this.context = context;
        this.name = name;
        this.phone_number = phone_number;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_contact_phone_dialog);//弹窗布局
        if (this.getWindow() != null) {
            WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
            layoutParams.gravity = Gravity.BOTTOM;//底部弹出
            layoutParams.width = RelativeLayout.LayoutParams.MATCH_PARENT;
            layoutParams.height = RelativeLayout.LayoutParams.WRAP_CONTENT;
            getWindow().getDecorView().setPadding(0, 0, 0, 0);
            getWindow().setAttributes(layoutParams);
            //getWindow().setWindowAnimations(R.style.DialogAnimation);//view中添加动画
        }
        tvCall = findViewById(R.id.call_service);
        tv_contact_customer = findViewById(R.id.tv_contact);
        tv_cancel = findViewById(R.id.tv_close);
        tv_cancel.setOnClickListener(this);
        tv_contact_customer.setOnClickListener(this);
        tvCall.setOnClickListener(this);
    }


    @Override
    public void onClick(View view) {
        if (view.getId() == R.id.call_service) {
            if (onCallSalesListener != null) {
                onCallSalesListener.onCallSalesman();
            }
        }
        if (view.getId() == R.id.tv_contact) {
            if (onCallSalesListener != null) {
                onCallSalesListener.onContactCustomerService();
            }
        }
        if (view.getId() == R.id.tv_close) {
            dismiss();
        }
    }

    //监听接口
    public interface OnCallSalesListener {
        void onCallSalesman();

        void onContactCustomerService();
    }

    private OnCallSalesListener onCallSalesListener;

    public void setOnCallSalesListener(OnCallSalesListener onCallSalesListener) {
        this.onCallSalesListener = onCallSalesListener;
    }
    
}

llamar a:

 BottomDialog bottomDialog = new BottomDialog(this, "王老五","110", R.style.AlertDialogStyle);
 bottomDialog.show();

popupWindow alcanzar la parte inferior del pop

public class BottomPopWindow extends PopupWindow implements View.OnClickListener{


    private View mMenuView;
    //文本信息
    private TextView tv_prompt_info;
    private final RelativeLayout rl_close;
    private final TextView tv_close;

    public BottomPopWindow(final Context context) {
        super(context);
        mMenuView = View.inflate(context,R.layout.layout_bottom_pop,null);
        //提示信息内容
        tv_prompt_info = mMenuView.findViewById(R.id.tv_info);
        rl_close = mMenuView.findViewById(R.id.rl_close);
        rl_close.setOnClickListener(this);
        tv_close = mMenuView.findViewById(R.id.tv_close);
        tv_close.setOnClickListener(this);
        tv_prompt_info.setText("寒塘渡鹤影,冷月葬花魂");
        tv_prompt_info.setHighlightColor(context.getResources().getColor(android.R.color.transparent));
        //设置SelectPicPopupWindow的View
        this.setContentView(mMenuView);//设置布局
        //设置弹出窗体的宽和高
        this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
        this.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
        //返回键可点击
        this.setFocusable(true);
        //外部可点
        this.setOutsideTouchable(true);
        //弹出窗体的背景
        this.setBackgroundDrawable(new ColorDrawable(0xAA000000));
        //动画效果
        this.setAnimationStyle(R.style.DialogAnimation);
        //弹窗dismiss时调用
        this.setOnDismissListener(new OnDismissListener() {
            @Override
            public void onDismiss() {
					//弹窗结束的收尾工作...
            }
        });
    }

    @Override
    public void onClick(View v) {
        if (v.getId()==R.id.rl_close || v.getId()==R.id.tv_close ){
                dismiss();
        }
    }
}

llamar a:

 BottomPopWindow bottomDialog = new BottomPopWindow(this);
 bottomDialog.showAtLocation(findViewById(R.id.llParent), Gravity.BOTTOM, 0, 0);
Publicado 28 artículos originales · ganado elogios 1 · visitas 519

Supongo que te gusta

Origin blog.csdn.net/qq_40575302/article/details/104706470
Recomendado
Clasificación