# Überlagern eines Layouts



## Blutgerinsel (16. Jun 2012)

Hallo zusammen,

ich stelle mir zurzeit folgende Frage.

Wie kann ich ein Layout überlagern um ein eigenes Menu anzuzeigen?

Prinzipiell soll folgendes erreicht werden.

- Die komplette Leinwand besteht aus einem GridLayout, welche in jeder Grid auf einen onLongClickListener hören soll
- Wird der Listener aktiv, soll ein eigenes Menü in Abhängigkeit zu den aktuellen Koordinaten erscheinen
- Das Menu gibt eine Anzahl an Elemente vor
- Klickt man ein Element an wird es im jeweiligen Grid platziert

Welche Möglichkeiten gibt es um dies zu erreichen?


----------



## schlingel (16. Jun 2012)

Redest du von Android?

Falls ja hast du da zwei Möglichkeiten. Entweder realisierst du es innerhalb eines PopupWindows oder du packst dein GridLayout in ein RelativeLayout. Im RelativeLayout liegt automatisch alles darüber was nach dem GridLayout hinzugefügt wird.


----------



## Blutgerinsel (16. Jun 2012)

schlingel hat gesagt.:


> Redest du von Android?
> 
> Falls ja hast du da zwei Möglichkeiten. Entweder realisierst du es innerhalb eines PopupWindows oder du packst dein GridLayout in ein RelativeLayout. Im RelativeLayout liegt automatisch alles darüber was nach dem GridLayout hinzugefügt wird.



Stimmt es geht um Android sry hab ich wohl unterschlagen.

Hmm mir sind noch ein paar Fragen gekommen und zwar....

Wie realisiert man eine Leinwand in der man die folgenden Dinge realisieren kann?
- Leinwand soll auf OnLongclicked Reagieren?
* Mein Ansatz war eine Custom View zu setzen und den Listener zu implementieren, der Event funktioniert an jeder Stelle

- Leinwand soll ein Auswahlmenu anzeigen das in den Vordergrund gelangt. Hier wählt man dann eine Image View aus
* PopupWindow habe ich versucht öffnet sich aber nicht über der View

- Die ausgewählte ImageView soll dann auf der Leinwand platziert werden


Mein Ansatz bisher (drehe mich irgendwie im Kreis)

```
package de.htwg.popuptest;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout.LayoutParams;
import android.widget.PopupWindow;

public class PopupTestView extends View implements View.OnLongClickListener{
	private Context context;
	
	public PopupTestView(Context context) {
		super(context);
		this.context = context;
		this.setOnLongClickListener(this);
	}

	public boolean onLongClick(View v) {
		LayoutInflater layoutInflater 
        = (LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
		View popupView = layoutInflater.inflate(R.layout.popup, null);
		
		final PopupWindow popupWindow = new PopupWindow(popupView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);  
	             
	    Button btnDismiss = (Button)popupView.findViewById(R.id.dismiss);
		
	    popupWindow.showAsDropDown(this);	    
		Log.e("Info", "Long Clicked");
		return true;
	}

}
```


----------



## schlingel (16. Jun 2012)

PopupWindows müssen die Größe die sie annehmen sollen mitbekommen ansonsten poppen sie wirklich nicht auf.

Wenn das ImageView im Popup ist funktioniert alles wie du es brauchst.


----------



## Blutgerinsel (16. Jun 2012)

schlingel hat gesagt.:


> PopupWindows müssen die Größe die sie annehmen sollen mitbekommen ansonsten poppen sie wirklich nicht auf.
> 
> Wenn das ImageView im Popup ist funktioniert alles wie du es brauchst.



Klappt jetzt beinahe alles....

Noch eine Frage ich habe eine abgeleitete Klasse von View, die auf onlongclicked wartet, nun das PopupWindow öffnet, diverse ImageViews anzeigt und sich bei nem click auf eine imageview sich wieder schließt.

Für die Elemente habe ich im EventListener nun ebenfalls auch die passende ID.

Was jetzt noch fehlen würde, wäre diese ImageView auf meine View zu zeichnen die bisher auf onlongclicked reagiert? Ist das auch noch möglich?


----------



## schlingel (16. Jun 2012)

Wenn du eine CustomView hast kannst du entweder in dieser Zeichnen oder du lässt deine CustomView von einer ImageView ableiten, dann kannst du direkt die Grafik zeichnen.


----------



## Blutgerinsel (16. Jun 2012)

schlingel hat gesagt.:


> Wenn du eine CustomView hast kannst du entweder in dieser Zeichnen oder du lässt deine CustomView von einer ImageView ableiten, dann kannst du direkt die Grafik zeichnen.


Also interessieren würde mich vor allem die CustomView.....

Meine View besitzt scheinbar keine geeigneten Methoden um programmatisch zur Laufzeit meine Bilder hinzuzufügen.

Eine weitere Quizfrage ist auch welches Layout eine Custom View besitzt.

Nach einer Recherche von android - custom view with layout - Stack Overflow
sieht es so aus als ob ich eine XML erzeugen müsste mit einer ID und diese dann der View hinzufügen.

Und über die ID des Layout könnte ich dann meine ImageView hinzufügen.

Hmm vielleicht fällt mir noch was ein auf dem Weg zum Döner xD


----------

