Cómo implementar un cuadro de selección emergente desde una ventana emergente
1 /**
2 * Menú emergente
3 */
4 public void menu_press(){
5 if(!menu_display){
6 //Obtener la instancia de LayoutInflater
7 inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
8 //Aquí está el diseño principal que se agregó en inflate oh. Solía ser this.setContentView(), ¿verdad? Oh
9 //Este método devuelve un objeto Ver, que es la raíz del diseño
10 layout = inflater.inflate(R.layout.main_menu, null); p>
p>
11
12 //Esto es lo que tenemos que pensar: ¿cómo agrego mi diseño a PopupWindow? Muy simple
13 menuWindow = new PopupWindow(layout, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); // Los dos últimos parámetros son ancho y alto
14 // Los dos últimos parámetros son ancho y alto.
showAsDropDown(layout); //establece el efecto de ventana emergente
15 //menuWindow.showAsDropDown(null, 0, layout.getHeight()
16
17 //establece los siguientes cuatro mensajes, al hacer clic en otras áreas para ocultarlos, para configurarlos antes de mostrar
18 menuWindow.setFocusable(true);
19 menuWindow.setOutsideTouchable; (verdadero);
20 menuWindow.update();
21 menuWindow.setBackgroundDrawable(new BitmapDrawable();
22
23 mClose = (LinearLayout)layout.menu_close);
24 menuWindow.showAtLocation(this.findViewById(R.id.schoolmain), Gravity.BOTTOM|Gravity.CENTER_ HORIZONTAL, 0, 50); / Establecer la posición del diseño que se mostrará en la ventana emergente
25 // ¿Cómo obtenemos los controles en la ventana principal? Esto también es muy simple
26 mMainbtn = (LinearLayout) layout.findViewById(R.id.menu_main_btn);
27 mHistorybtn = (LinearLayout) layout.findViewById(R.id. menu_history_btn );
28
28 mHelpbtn = (LinearLayout) diseño.findViewById(R.id.menu_help_btn
29
); 30
31
32 //Registre eventos de clic para cada diseño a continuación.
33 //Por ejemplo, cuando se hace clic en un elemento de menú, su color de fondo cambiará
34 //Prepara algunas imágenes o colores de fondo con anticipación
35 mMainbtn .setOnClickListener (new View.OnClickListener() {
36 @Override
37 public void onClick(View arg0) {
38 mywebView.loadUrl(URL){ p >
38loadUrl(URL);
39 menuWindow.dismiss(); //cerrar el menú después de responder al evento de clic
40 }
35 mMainbtn.OnClickListener() {
43 @Override
44 public void onClick( Ver arg0) {
45 mywebView.loadUrl(URL);
p>46 menuWindow.dismiss(); //Respuesta al evento de clic
47 }
48 });
49 mHistorybtn .OnClickListener() {
50 @Override
51 public void onClick(View arg0) {
52 mywebView.loadUrl(URL);
53 menuWindow.dismiss(); //Respuesta al evento de clic
54 }
55 });
56 menu_display = true ; p>
57 }else{
58 //Si el estado actual ya se muestra, ocúltalo
59 menuWindow.dismiss();
60 menu_display = false ;
61 }
62
63 }
64
65 public void back_press (){
66
67 if(menu_display){ //si el menú ya está abierto, ciérrelo primero
68 menuWindow.dismiss();
69 menu_display = false;
70 }
71 else {
72 Intención intención = nueva Intención();
73 intent.setClass(MainActivity.this, Exit.class);
74 startActivity(intención
75 }
76 } p>
Este método es muy simple, tenga en cuenta que si desea hacer clic en otro lugar para ocultarlo, debe configurar las siguientes cuatro propiedades en la pantalla:
// Hacerlo enfocable
mPopupWindow.
sable(true);
// establece Permitir que el toque externo desaparezca
mPopupWindow.setOutsideTouchable(true);
// Actualiza el estado
mPopupWindow.update();
Haga clic en el botón Atrás y en cualquier otro lugar para hacerlo desaparecer. OnDismisslistener, configura otros controles para cambiar y otras operaciones
mPopupWindow.setBackgroundDrawable(new BitmapDrawable());
La segunda actividad se usa para crear ventanas emergentes falsas
Siento que esto es muy avanzado. Perdóneme por ofenderme, simplemente escribo el increíble código aquí. Este tipo increíble escribió una demostración anti-WeChat. Está bastante bien hecho, adjunté un enlace de descarga gratuita a CSDN en la parte posterior.
OnClickListener;
8 importar android.widget.LinearLayout;
9 importar android.widget.Toast;
10
11 clase pública Salir extiende la actividad {
12
13 diseño LinearLayout privado
14 @Override
15 protected void onCreate(Bundle saveInstanceState) {
16 super.onCreate(savedInstanceState);
17 setContentView(R.layout.exit_dialog);
18layout.exit_dialog
18 diseño=(LinearLayout)findViewById(R.id.exit_layout);
19 diseño.setOnClickListener(new OnClickListener() {
20
21 @ Anular
22 public void onClick(View v) {
23 // TODO Código auxiliar de método generado automáticamente
24 Toast.makeText(getApplicationContext(), " Sugerencia: ¡al hacer clic fuera de la ventana se cierra la ventana!
25 Toast.LENGTH_SHORT).show();
26 }
27 }); p>
27 }); p>
28 }
29
30 @Override
31 público booleano onTouchEvent (evento MotionEvent){
32 finalizar ();
33 devolver verdadero
34 }
35
36 vacío público; exitbutton1(Ver v) {
37 this.finish();
38 }
39 public void exitbutton0(Ver v) {
40 this.finish();
41 MainWeixin.instance.finish(); //cerrar principal esta actividad
42 }
42 }
43 }
Adjunto el archivo de diseño: exit_dialog.xml
Ver el código
Analizarlo, es muy sencillo de abrir Arriba en el cuadro de salida, en sí es una ACTIVIDAD, en la interfaz principal use startavtivity y otros métodos como si fuera una actividad simple.
La clave es cómo hacer clic en otro lugar para salir y cómo cerrar el programa.
1. Al hacer clic en otro lugar para salir, simplemente escuche OnClickListener y deje que todos los clics salgan (excepto los eventos de botón especificados en xml).
2. Salga del programa principal. Simplemente configure el programa principal como un objeto estático en el programa de salida y llame a public static MainWeixinstance=null externamente;
El diseño y las actividades anteriores no muestran el formulario activo en la parte superior de la interfaz principal. , parece un cuadro emergente. windowNoTitle"gt; truelt;/itemgt;
5 lt;item name="android: windowIsFloating"gt;truelt;/itemgt;
6 lt;item name="android: windowIsTranslucent"gt;truelt;/itemgt;
7 lt;item name="android:windowContentOverlay"gt;@nulllt;/itemgt;
8 lt;item name="android :windowAnimationStyle"gt; @android: style/Animation.Dialog lt;/itemgt;
9 lt; item name="android:.backgroundDimEnabled"gt; truelt;/itemgt;
10lt;/estilogt;