0

Ich möchte auf Knopfdruck ein Popup auf meine Aktivität zeigen. Ich wurde inspiriert by this questionWie erstelle ich eine Popup-Überlagerungsansicht in einer Aktivität ohne Fragment?

So verwende ich die "merge" Kontrolle in den Inhalt xml der Aktivität und setzen Sie es in die 2 verschiedenen Layouts, tritt das Problem offensichtlich bei dieser Zeile (Code aus der oben verknüpften Frage entnommen):

FragmentManager fragmentManager = getFragmentManager(); 
fragmentManager.beginTransaction() 
    .add(R.id.overlay_fragment_container, yourFragment) 
    .commit(); 

wegen ofc FragmentManager funktioniert für Fragmente.

Mein Problem ist, dass meine Aktivität nicht "fragmentiert" ist, aber ihr LinearLayout wird direkt in der Aktivität aufgebläht und nicht in einem Fragment in der Aktivität.

Kann ich einen ähnlichen Effekt wie diese Frage in einer Aktivität erhalten oder muss ich alle seine Kontrollen in ein Fragment einbetten?

Vielen Dank im Voraus

+0

Werfen Sie einen Blick auf [DialogFragments] (http://developer.android.com/reference/android/app/DialogFragment.html) –

+0

Sollte ich es auch verwenden, wenn meine Ansicht nicht nur eine Multiple-Button-Frage sein sollte ? Ich brauche eine Rate-Ansicht mit einer RatingBar und einem EditText, um den Kommentar auszuwählen. Wäre DialogFragment gut dafür? (Vielleicht ja, weil ich noch 2 Knöpfe hinzufügen werde, um entweder zu bewerten oder abzubrechen) – BlackBox

+0

Ja, [AlertDialog] (http://developer.android.com/reference/android/app/AlertDialog.html) ist der Standarddialog zur Bestätigung usw., aber 'DialogFragment' ist viel flexibler (was Sie brauchen). –

Antwort

4

Ok, so könnte dies wie eine Menge Code erscheinen, aber es ist wirklich einfach.

Zuerst erstellen Sie das gewünschte Dialoglayout in XML. (nicht im selben XML wie die Aktivitätsansicht) Hier ist ein Beispiel.

custom_dialog.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="52dp" 
     android:text="New Text" 
     android:id="@+id/txtTitle" /> 

    <ListView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/listView" 
     android:layout_weight="1" /> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="52dp"> 

     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="New Button" 
      android:id="@+id/btnBtmLeft" 
      android:layout_weight="1" /> 

     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="New Button" 
      android:id="@+id/btnBtmRight" 
      android:layout_weight="1" /> 
    </LinearLayout> 
</LinearLayout> 

Dann in Ihrem Aktivität wie folgt vor:

private void showMyDialog(Context context) { 
    final Dialog dialog = new Dialog(context); 
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    dialog.setContentView(R.layout.custom_dialog); 
    dialog.setCanceledOnTouchOutside(false); 
    dialog.setCancelable(true); 

    TextView textView = (TextView) dialog.findViewById(R.id.txtTitle); 
    ListView listView = (ListView) dialog.findViewById(R.id.listView); 
    Button btnBtmLeft = (Button) dialog.findViewById(R.id.btnBtmLeft); 
    Button btnBtmRight = (Button) dialog.findViewById(R.id.btnBtmRight); 

    btnBtmLeft.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      dialog.dismiss(); 
     } 
    }); 

    btnBtmRight.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // do whatever you want here 
     } 
    }); 

    /** 
    * if you want the dialog to be specific size, do the following 
    * this will cover 85% of the screen (85% width and 85% height) 
    */ 
    DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); 
    int dialogWidth = (int)(displayMetrics.widthPixels * 0.85); 
    int dialogHeight = (int)(displayMetrics.heightPixels * 0.85); 
    dialog.getWindow().setLayout(dialogWidth, dialogHeight); 

    dialog.show(); 
} 

Und schließlich in onCreate Ihrer Tätigkeit, rufen Sie diese Methode

myButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     showMyDialog(context); 
    } 
}); 

Hoffe das hilft!

+0

Das ist großartig! – BlackBox