2016-06-14 9 views
0

Ich habe versucht, ein einfaches Popup-Fenster zu erstellen, das angezeigt wird, wenn der Benutzer auf das Sprite klickt. Ich habe ein Layout für das Popup erstellt, es wird nicht angezeigt. Fehle ich etwas?Android Studio Pop-up-Fenster?

Edit: hier ist der Rest meiner Aktivitätsklasse:

public class UniverseActivity extends AppCompatActivity { 

public static final String TAG = UniverseActivity.class.getSimpleName(); 

private UniverseThread thread; 

private Galaxy player; 
public Galaxy getPlayer() { 
    return player; 
} 

//components: 
private SeekBar speedBar; 
private ProgressBar timeBar; 
private UniverseView surfaceView; 
private ImageView playerSprite; 
private ImageView otherSprite; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setContentView(R.layout.activity_universe); 

    speedBar = (SeekBar) findViewById(R.id.seekBar); 
    timeBar = (ProgressBar) findViewById(R.id.progressBar); 
    surfaceView = (UniverseView) findViewById(R.id.surfaceView); 

    playerSprite = (ImageView) findViewById(R.id.playerGalaxy); 
    player = new Galaxy("Milky Way", true, new Velocity(), playerSprite, 1); 

    otherSprite = (ImageView) findViewById(R.id.otherGalaxy); 

    playerSprite.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      PopupWindow infoWindow = new PopupWindow(findViewById(R.id.galaxy_info_popup)); 
      Log.d(TAG, "Player sprite clicked, stopping time and bringing up window..."); 
      Log.d(TAG, "Will this please work?"); 
      speedBar.setProgress(0); 
      infoWindow.showAtLocation(surfaceView, Gravity.BOTTOM, 10, 10); 
      infoWindow.update(50,50,300,500); 
     } 
    }); 
} 

Und mein Layout:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="300dp" 
android:layout_height="500dp" 
android:id="@+id/galaxy_info_popup" 
android:background="#ffffff"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="Large Text" 
    android:id="@+id/nameText" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" /> 

<ImageView 
    android:layout_width="fill_parent" 
    android:layout_height="200dp" 
    android:id="@+id/infoPicture" 
    android:layout_below="@+id/nameText" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="infoText" 
    android:id="@+id/infoText" 
    android:layout_below="@+id/infoPicture" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" /> 

Antwort

0

ich PopUpWindow Arbeit bekommen nicht in der Lage war, aber ich habe den gleichen Effekt viel einfacher mit Android Dialog Klasse.

Dies ist, was ich am Ende mit:

infoPopUp = new Dialog(this); 
infoPopUp.setContentView(R.layout.info_popup); 

Im OnClickListener:

Log.d(TAG, "Player sprite clicked, stopping time and bringing up window..."); 
speedBar.setProgress(0); 
infoPopUp.setTitle(player.getName()); 
((ImageView)infoPopUp.findViewById(R.id.infoPicture)).setImageDrawable(player.getSprite().getDrawable()); 
infoPopUp.findViewById(R.id.option1).setVisibility(View.INVISIBLE); 
infoPopUp.findViewById(R.id.option2).setVisibility(View.INVISIBLE); 
infoPopUp.findViewById(R.id.continueButton).setVisibility(View.VISIBLE); 
((TextView)infoPopUp.findViewById(R.id.infoText)).setText(player.toString()); 
infoPopUp.show(); 
0

den Konstruktor PopupWindow(View view) nicht die tatsächliche Popup-Fenster Größe festgelegt. Es wird standardmäßig auf 0 Höhe und 0 Breite eingestellt. Sie müssen wahrscheinlich setWidth() und setHeight() aufrufen, nachdem Sie Ihr Popup erstellt oder einen anderen Konstruktor verwendet haben. Here ist die Android-Dokumentation auf PopupWindows. Ich würde wahrscheinlich PopupWindow(View view, int width, int height) verwenden. Ein weiteres Problem könnte darin bestehen, dass die von Ihnen übermittelte Ansicht möglicherweise nicht richtig angezeigt wird oder je nach Situation ungültig ist. Eine andere Lösung wäre, update() aufzurufen und die gewünschte Größe anzugeben.

1

Das sollte letzte Zeile wie sein -

 infoWindow.showAtLocation(surfaceView, Gravity.BOTTOM, 10, 10); 
    infoWindow.update(50, 50, 300, 80); 

es Hoffnung für Sie arbeiten :)

+0

I sowie geänderte surfaceView.findFocus() setzen, dass nur in Surface, zu. Nichtsdestotrotz taucht nichts auf. –

+0

Besser, wenn Sie Ihr Layout und Ihre Aktivitätsklasse teilen, damit Sie Ihr Problem leichter beheben können. – Neo

+0

Ich habe eine Bearbeitung mit allem gemacht –