2012-12-22 7 views
9

Ho una finestra di avviso che viene avviata quando qualcuno tocca un pulsante specifico. La finestra di avviso contiene una vista definita da un file xml di layout. Questo layout contiene diversi controlli come caselle di controllo, modifica campi di testo, ... Questi controlli sono tutti all'interno di una vista scrool in modo da poter scorrere il contenuto, se l'intero contenuto non si adatta allo schermo.I pulsanti di dialogo di avviso sono tagliati

Il problema è ora che quando avvio questa finestra di avviso, i pulsanti nella parte inferiore sono tagliati fuori dallo schermo. Anche se la barra di scrool funziona e posso scorrere il contenuto della finestra di avviso, i pulsanti della finestra di avviso a volte non sono completamente visibili.

Ciò significa: A volte, tutto va bene e posso vedere i pulsanti della finestra di avviso, a volte per strana ragione, i pulsanti sono tagliati. Penso che sia un problema che la vista sia troppo grande per la finestra di avviso e che spinga i pulsanti più in basso. Ad esempio, la vista contiene un controllo di testo di modifica. Se inserisco il mio nome, tutto va bene. Ma se aggiungo una nuova riga a questo testo di modifica, i pulsanti iniziano a essere tagliati un po '. Cosa ho sbagliato? Ho pensato che la vista di scorrimento avrebbe gestito l'oversize della mia vista in modo che la finestra di avviso si adattasse allo schermo. La mia app è sempre in modalità verticale.

Il codice della vista:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/scrollView2" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fillViewport="true" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:padding="5dp" > 

     <TextView 
      android:id="@+id/textView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/bitteeinstellungenwaehlen" /> 

     <EditText 
      android:id="@+id/edtTeam1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:ems="10" 
      android:hint="@string/hteam1" 
      android:text="Christoph" > 

      <requestFocus /> 
     </EditText> 

     <EditText 
      android:id="@+id/edtTeam2" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:ems="10" 
      android:hint="@string/hteam2" 
      android:text="Lea" /> 

     <EditText 
      android:id="@+id/edtTeam3" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:ems="10" 
      android:hint="@string/hteam3" 
      android:text="Ludwig" /> 

     <EditText 
      android:id="@+id/edtTeam4" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:ems="10" 
      android:hint="@string/hteam4" 
      android:text="Anja" /> 

     <TextView 
      android:id="@+id/textView2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/weitereeinstellungen" /> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" > 

      <CheckBox 
       android:id="@+id/chkModerationMode" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/moderationsmodus" /> 

      <TextView 
       android:id="@+id/textView3" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="10dp" 
       android:text="@string/info" /> 

     </LinearLayout> 

     <CheckBox 
      android:id="@+id/chkPassOver" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:checked="true" 
      android:text="@string/weitergeben" /> 

     <CheckBox 
      android:id="@+id/chkBlackScreen" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/blankscreen" /> 

    </LinearLayout> 

</ScrollView> 

Ed è così che mi metto la finestra di avviso:

final AlertDialog.Builder alert = new AlertDialog.Builder(QuizEditor.this); 

    alert.setTitle(getString(R.string.speichernUndVorschau) + "..."); 
    alert.setMessage(""); 


    LayoutInflater inflater = LayoutInflater.from(QuizEditor.this); 
    final View layFrage = inflater.inflate(R.layout.layoutquizsettings,null); 
    alert.setView(layFrage); 

    final CheckBox chkModeration = (CheckBox) layFrage.findViewById(R.id.chkModerationMode); 
    final CheckBox chkPassOver = (CheckBox) layFrage.findViewById(R.id.chkPassOver); 
    final CheckBox chkBlackScreen = (CheckBox) layFrage.findViewById(R.id.chkBlackScreen); 

    final EditText edtTeam1 = (EditText) layFrage.findViewById(R.id.edtTeam1); 
    final EditText edtTeam2 = (EditText) layFrage.findViewById(R.id.edtTeam2); 
    final EditText edtTeam3 = (EditText) layFrage.findViewById(R.id.edtTeam3); 
    final EditText edtTeam4 = (EditText) layFrage.findViewById(R.id.edtTeam4); 



    alert.setNeutralButton(getString(R.string.speichernUndVorschau), new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int whichButton) { 




    } 
    }); 

    alert.setNegativeButton(getString(R.string.abbrechen), new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 
     // Canceled. 
     } 
    }); 



    final AlertDialog dialog2 = alert.create(); 

    dialog2.setOnShowListener(new OnShowListener() { 

     @Override 
     public void onShow(DialogInterface dialog) { 
      // TODO Auto-generated method stub 
      Button btnStarten = (Button) dialog2.getButton(AlertDialog.BUTTON_NEUTRAL); 
      btnStarten.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        ArrayList<String> teams = new ArrayList<String>(); 

        String team1 = edtTeam1.getText().toString().trim(); 
        String team2 = edtTeam2.getText().toString().trim(); 
        String team3 = edtTeam3.getText().toString().trim(); 
        String team4 = edtTeam4.getText().toString().trim(); 

        if(team1.length() > 0) teams.add(team1); 
        if(team2.length() > 0) teams.add(team2); 
        if(team3.length() > 0) teams.add(team3); 
        if(team4.length() > 0) teams.add(team4); 

        if(teams.size() == 0) { 
         Toast.makeText(QuizEditor.this, getString(R.string.keinteameingegeben), Toast.LENGTH_SHORT).show(); 

        } 
        else 
        { 
         // Quiz starten 



         dialog2.dismiss(); 
         Intent myIntent; 

         if(chkBlackScreen.isChecked()) { 
          myIntent = new Intent(QuizEditor.this, BlackScreen.class); 
         } 
         else // Direkt das Quiz starten 
         { 
          myIntent = new Intent(QuizEditor.this, Quiz.class); 
         } 


         myIntent.putStringArrayListExtra("teams", teams); 
         myIntent.putExtra("moderation", chkModeration.isChecked()); 
         myIntent.putExtra("passover", chkPassOver.isChecked()); 
         myIntent.putExtra("filename", filename); 


         QuizEditor.this.startActivity(myIntent); 
        } 
       } 

      }); 

     } 

    }); 

    dialog2.show(); 
    // dialog2.getWindow().setLayout(LayoutParams.WRAP_CONTENT, 300); 

Mi dispiace per le parole tedesche. Nell'immagine puoi vedere il problema. Purtroppo non mi è stato permesso di caricare gli screenshot che ho creato ...

+2

Ok, grazie per il vostro aiuto! Fortunatamente, ho trovato l'errore: alert.setMessage (""); Da quando ho rimosso questa linea, tutto funziona correttamente. – Chris623

+0

stesso qui, grazie per questa soluzione. Komischer fehler und schwer zu finden danke dafür =) –

risposta

0

Imposta righe EditText su 1. Imposta anche LinearLayout esterno su fill_parent.

0

È sufficiente effettuare tutte le proprietà android:singleLine="true"android:singleLine="true" e provare a testare.

0

La domanda era già stata risolta nei commenti, ma aggiungerò una risposta per completezza e per dimostrare che ha funzionato anche per me.

Per un AlertDialog con una vista personalizzata, non utilizzare la riga .setMessage. La rimozione della seguente riga nel mio progetto ha causato il blocco dei pulsanti.

.setMessage("This is my message") 
Problemi correlati