1

Derzeit habe ich eine Schaltfläche innerhalb einer Linear Layout, etwa so:PopupWindow beim Klicken auf eine Schaltfläche anzeigen?

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 
    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="@string/open_popup" 
     android:onClick="createPopup"/> 
</LinearLayout> 

Ich habe auch eine Erweiterung create (die in der Tat nicht ausgeführt wird, wenn die Schaltfläche geklickt wird).

public void createPopup(View view) { 

} 

habe ich versucht, ein PopupWindow mit einem TextView in ihn zu schaffen. Ich rief dann showAtLocation(parent, gravity, x, y) an, wobei parent die Wurzel LinearLayout ist. gravity wurde Gravity.BOTTOM, x und y wurden beide auf 10 gesetzt.

Als ich auf den Knopf klickte, empfing ich einen IllegalStateException Fehler, wo ich showAtLocation() anrief. Hier ist die createPopup() Funktion:

PopupWindow popUp; 
LinearLayout layout; 
LinearLayout main; 
TextView value; 
LayoutParams params; 
boolean click = true; 
public void createPopup(View view) { 
    popUp = new PopupWindow(this); 
    layout = new LinearLayout(this); 
    main = (LinearLayout) findViewById(R.id.parent); 
    value = new TextView(this); 
    if(click) { 
     popUp.showAtLocation(main, Gravity.BOTTOM, 10, 10); 
     popUp.update(50, 50, 300, 80); 
     click = false; 
    } else { 
     popUp.dismiss(); 
     click = true; 
    } 
    params = new LayoutParams(LayoutParams.WRAP_CONTENT, 
      LayoutParams.WRAP_CONTENT); 
    layout.setOrientation(LinearLayout.VERTICAL); 
    value.setText(R.string.message); 
    layout.addView(value, params); 
    popUp.setContentView(layout); 
    setContentView(main); 
    TextView status = (TextView) findViewById(R.id.status); 
    status.setTextSize(28); 
    status.setText("Status of Popup: Don't worry, you're never going to get this."); 
} 

Was Ich mag würde wissen ist:

  • Was bedeutet, dass Fehler entdeckt?
  • Warum erscheint es?
  • Wie kann ich es beheben?
  • Wie erstelle ich ein einfaches Popup-Fenster, das an dem Klick auf eine Schaltfläche angezeigt wird? *

* I eine Funktion erstellen können, möchte, wo es zumindest einen Parameter (welche wären nimmt a String), und erstellen Sie dann ein Popup-Fenster, das String enthält, sowie eine Schaltfläche zum Schließen des Popup-Fensters.

EDIT: Nicht sicher, ob dies mit dem Popup-Problem verbunden ist, aber wenn ich die app laufen, bekomme ich diesen Fehler:

07-13 19:51:48.448 133-133/? E/[EGL-ERROR]: egl_image* _egl_create_image_ANDROID_native_buffer(egl_display*, egl_context*, EGLClientBuffer, EGLint*, void*):593: CHUN try create image with crop 0,0,0,0 


              [ 07-13 19:51:48.448 133: 133 E/   ] 
              CHUN map external image rgb 1024 x 600 

ZWEITE EDIT: Ich habe über einen entsprechenden Code hinzugefügt .

+0

den vollständigen Stacktrace des Fehlers buchen. einschließlich der Fehlermeldung, das ist wichtig. – JoxTraex

+0

Ich weiß nicht, ob ich es reproduzieren kann, aber ich kann es versuchen. –

+0

Bitte stellen Sie sicher, dass fünf vollständige Stacktraces bei der Angabe eines Fehlers unglaublich hilfreich sind, um zu verstehen, was vor sich geht. – JoxTraex

Antwort

2

Wenn Sie sich überlegen, wie Sie einen Dialog implementieren, erstellen Sie normalerweise eine separate Layoutdatei, eine Klassendatei, und rufen sie dort auf, wo sie angezeigt werden soll. Dialoge zeigen über die andere Aktivität in der Mitte, und soweit ich weiß, können sie nicht bewegt werden.

Wenn Sie den Dialog angezeigt werden soll, können Sie anrufen:

private void openMyDialog() { 
    MyDialog dialog = new MyDialog(this); 
    dialog.show(); 
} 

MyDialog.java muss Dialog erweitern und android.view.View.OnClickListener zu implementieren. Es enthält jeden Code, der zum Speichern oder Steuern der Elemente in Ihrem Layout erforderlich ist. MyDialog.java:

import android.app.Activity; 
import android.app.Dialog; 
import android.os.Bundle; 
import android.support.v7.app.AlertDialog; 
import android.view.View; 
import android.view.Window; 
import android.widget.Button; 
import android.widget.EditText; 

public class MyDialog extends Dialog implements android.view.View.OnClickListener { 

    public Activity activity; 

    public MyDialog() { 
     super(null); 
    } 
    public MyDialog(Activity activity) { 
     super(activity); 
     this.activity = activity; 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.my_dialog); 
    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
      default: 
       break; 
     } 
     dismiss(); 
    } 

} 

my_dialog.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="#1C1C1C"> 
<!-- Whatever your layout will consist of can go here --> 

</RelativeLayout> 

Ich hoffe, dass dies Ihre Frage beantwortet. Wenn dies nicht der Fall ist, können Sie diesen Beitrag kommentieren. Ich weiß nicht, wie ich deinen Fehler beheben kann (da es nicht der vollständige Fehler ist), aber ich weiß, wie man benutzerdefinierte Dialoge (oder Popups) implementiert, um über deine anderen Aktivitäten zu gehen.

+0

Danke für Ihre Antwort. Ich versuche Ihre Lösung und dann gehe ich zurück und schaue mir die Details an, wie es in den Dokumenten funktioniert. Können Sie die von Ihnen verwendeten Importanweisungen hinzufügen? –

+0

Ich denke, ich habe alle notwendigen eingefügt ... Ich habe das aus einer großen Datei kopiert, die eine Reihe anderer Importe für andere Dinge enthält, die Sie nicht brauchen werden. Lassen Sie mich wissen, wenn Sie weitere Fragen haben! – TheAnonymous010

+0

In Zeile 18 steht 'this.activity = activity'. Android Studio sagt mir, dass es nicht gelöst werden konnte. Meinen Sie "this.setOwnerActivity (activity)"? –

Verwandte Themen