Red de conocimiento informático - Material del sitio web - Cómo implementar un cuadro de selección emergente desde una ventana emergente

Cómo implementar un cuadro de selección emergente desde una ventana emergente

I.PopupWindow

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>

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){

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

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 }

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;