Mostra un PopupWindow centralizzato

Ho alcuni popup nella mia app, è fullscreen e il seguente codice:

content.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); content.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); int screenWidth = windowManager.getDefaultDisplay().getWidth(); int screenHeight = windowManager.getDefaultDisplay().getHeight(); int x = screenWidth / 2 - content.getMeasuredWidth() / 2; int y = screenHeight / 2 - content.getMeasuredHeight() / 2; window.showAtLocation(content, Gravity.NO_GRAVITY, x, y); 

Rendere centrata la window.

  • SimpleDraweeView non ridimensiona dopo la scalatura dell'image in affresco
  • Come get la data dal widget di DatePicker in Android?
  • Codifica UTF-8 su WebView e ICS
  • Determinare l'elenco delle autorizzazioni utilizzate da un'applicazione installata in Android
  • Tempo di elaborazione di OpenCV Mat
  • Che cosa è il file keystore di Android e per quale utilizzo?
  • Ma ho un'altra attività che non è a pieno schermo, quando il popup si apre è giusto da where deve essere.

    Cercando di capire perché questo succede, credo che la showAtLocation mostra che è relativa all'attivita corrente, ma devo mostrarla relativa alla visualizzazione.

    Come lo posso fare? O c'è un modo più semplice per fare solo il popup appena centrato?

  • Scissione di un TextView in più TextViews relativi all'altezza dello schermo
  • Errore quando si preme il tasto per cambiare le visualizzazioni
  • Come modificare un disegnatore a livello di liste?
  • Come aggiungere image a spinner in Android
  • Android - Parse JSON usando GSON
  • Android - Errore durante la creazione di Player: CommandInvokationFailure: Imansible reimballare le risorse
  • 2 Solutions collect form web for “Mostra un PopupWindow centralizzato”

     popupWindow.showAtLocation(anyViewOnlyNeededForWindowToken, Gravity.CENTER, 0, 0); 

    Ciò centra la tua visione.

    Ci sono voluti 2 ore di dolore per capirlo. Non avevo bisogno di alcuna math magica nera per gestire questo.

    La vista è necessaria solo per il token della window, non ha altro effetto sulla posizione.

    Gravità dice al gestore di layout where avviare il sistema di coordinate e come trattare quelle coordinate. Non riesco a trovare i documenti ma l'hacking mi sta mostrando:

    • CENTER utilizza la metà del popup per allinearsi alla x, y specificata. Quindi 0,0 è centrato sullo schermo
    • BOTTOM utilizza la parte inferiore del popup per allinearsi alla x, y specificata. Quindi 0,0 ha il fondo popup allineato con il fondo dello schermo. Se vuoi l'imbottitura 10px allora y = 10 (non -10) per spostare la popup sullo schermo 10 pixel.

    Ho scritto questo sopra su Android PopupWindow.showAtLocation () e gli effetti della gravità

      View popupView = layoutInflater.inflate(R.layout.index_popviewxml, null); final PopupWindow popupWindow = new PopupWindow(popupView, LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT, true); popupWindow.setTouchable(true); popupWindow.setFocusable(true); popupWindow.showAtLocation(popupView, Gravity.CENTER, 0, 0); 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.