2010-07-20 6 views
0

Je suivais this guide pour créer un fichier AlertDialog personnalisé. Je veux faire un dialogue avec des boutons et un titre comme un AlertDialog, mais aussi avec une boîte EditText, qu'un AlertDialog ordinaire ne peut pas utiliser. Donc, j'ai fait la mise en page personnalisée suivante contenant la boîte EditText dans un fichier appelé add_player_dialog.xml dans res/mise en page, qui sera appelé par la setView de AlertDialog.Builder():Problème Android: la disposition de boîte de dialogue personnalisée est utilisée à la place du fichier main.xml pour l'activité racine

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/add_player_dialog_layout" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="10dp" 
    > 
    <EditText 
    android:id="@+id/player_name" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@android:drawable/editbox_background" 
    android:textSize="20sp" 
    /> 
</LinearLayout> 

Puis dans l'activité (et non la racine activité, btw) qui démarre le dialogue, je suit dans un commutateur onCreateDialog():

Context mContext = getApplicationContext(); 
    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE); 
    View layout = inflater.inflate(R.layout.add_player_dialog, 
        (ViewGroup) findViewById(R.id.add_player_dialog_layout)); 

    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle("Enter player's name") 
    .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
      Toast.makeText(getApplicationContext(), "yes", Toast.LENGTH_SHORT).show(); 
     } 
     }) 
    .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
      dialog.cancel(); 
     } 
     }) 
    .setView(layout); 
    AlertDialog alert = builder.create(); 

le problème est que l'activité qui est d'abord utilisée lorsque l'application est lancée utilise add_player_dialog.xml pour sa mise en page , pas main.xml. Comment puis-je éviter cela?

=================

EDIT: Je l'ai trouvé un moyen de programmation pour ce faire, si quelqu'un est intéressé:

import android.R.drawable; 

EditText et = new EditText(this); 
et.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 
et.setBackgroundResource(drawable.editbox_background); 
et.setTextSize(20); 

= ================

Si vous êtes intéressé, voici main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="40dip" 
    > 

    <LinearLayout 
    android:orientation="vertical" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:layout_gravity="center" 
    > 
    <Button 
     android:id="@+id/new_game_button" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="@string/new_game_button" 
     /> 
    <Button 
     android:id="@+id/continue_button" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="@string/continue_button" 
     /> 
    </LinearLayout> 

</LinearLayout> 

Répondre

0

avez-vous essayé/ont

setContentView(R.layout.main); 

dans la méthode onCreate?

Si oui, désolé, nous espérons que quelqu'un d'autre peut mieux carillon.

+0

Oui, j'ai ça. Nous vous remercions de votre aide. – Cnatoli

+0

Pouvez-vous poster votre main.xml et l'activité dont vous parlez? – James

0

Essayez de supprimer gen/R.java et de laisser le système de construction régénèrent, je l'ai vu que, parfois, lorsque vous ajoutez ID il sort de synchronisation et doit être régénéré avec force.

Questions connexes