Lynx Brutal Lynx Brutal - 4 months ago 44
Java Question

Android studio pop up window?

I've been trying to make a simple popup window to show up when the user taps on the sprite. I've made a layout for the popup, it doesn't show up. Am I missing something?

Edit: here's the rest of my Activity class:

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);
}
});
}


And my 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" />



Answer

I wasn't able to get PopUpWindow working, but I got the same effect much easier with Android's Dialog class.

This is what I ended up with:

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

In the 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();
Comments