简体   繁体   中英

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

The last line should be like -

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

Hope it will work for you :)

Using the constructor PopupWindow(View view) does not set the actual popup window size. It will default to 0 height and 0 width. You will probably have to call setWidth() and setHeight() after creating your popup or use other constructor. Here is the Android documentation on PopupWindows. I would probably use PopupWindow(View view, int width, int height) . Another problem might be that the view you are passing in may not be inflated correctly or may be invalid depending on the situation. Another solution would be to call update() and specify the size you want.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM