La question était de savoir le Popupwindow
classe, mais tout le monde a donné les réponses que l'utilisation de l' Dialog
classe. C'est assez inutile si vous avez besoin d'utiliser l' Popupwindow
classe, parce qu' Popupwindow
n'ont pas d' getWindow()
méthode.
J'ai trouvé une solution qui fonctionne réellement avec Popupwindow
. Il exige seulement que la racine du fichier xml que vous utilisez pour l'activité de fond est un FrameLayout
. Vous pouvez donner l' Framelayout
élément d'un android:foreground
balise. Ce que cette balise n'est spécifier un drawable de ressources qui seront en couches sur le dessus de l'ensemble de l'activité (qui est, si l'Framelayout est l'élément racine du fichier xml). Vous pouvez alors contrôler l'opacité (setAlpha()
) de l'avant-plan dessiné.
Vous pouvez utiliser n'importe quel drawable ressource que vous voulez, mais si vous voulez juste un effet d'assombrissement, créer un fichier xml dans le dossier drawable avec l' <shape>
balise en tant que root.
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="#000000" />
</shape>
(Voir http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape pour plus d'info sur l' shape
élément).
Notez que je n'ai pas spécifier une valeur alpha dans la balise de couleur qui ferait de la drawable élément transparent (e.g #ff000000
). La raison pour cela est que tout codé en dur la valeur alpha semble ignorer toute nouvelle alpha valeurs que nous avons définie via l' setAlpha()
dans notre code, nous ne voulons pas que.
Toutefois, cela signifie que le drawable élément sera initialement opaque (solide, non-transparent). Nous avons donc besoin de la rendre transparente dans l'activité, en onCreate()
méthode.
Voici la Framelayout élément xml code:
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainmenu"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:foreground="@drawable/shape_window_dim" >
...
... your activity's content
...
</FrameLayout>
Voici l'Activité de l'onCreate() la méthode:
public void onCreate( Bundle savedInstanceState)
{
super.onCreate( savedInstanceState);
setContentView( R.layout.activity_mainmenu);
//
// Your own Activity initialization code
//
layout_MainMenu = (FrameLayout) findViewById( R.id.mainmenu);
layout_MainMenu.getForeground().setAlpha( 0);
}
Enfin, le code pour varier l'intensité de l'activité:
layout_MainMenu.getForeground().setAlpha( 220); // dim
layout_MainMenu.getForeground().setAlpha( 0); // restore
Les valeurs alpha aller d' 0
(opaque) 255
(invisible).
Vous devriez onu-dim de l'activité lorsque vous fermez le Popupwindow.
Je n'ai pas inclus de code pour afficher et rejetant le Popupwindow, mais voici un lien pour la façon dont il peut être fait: http://www.mobilemancer.com/2011/01/08/popup-window-in-android/