2015-07-20 8 views
17

Ho un problema con lo Dialog.Builder, in cui i pulsanti sono troncati. Come posso risolvere questo o è un problema per i dispositivi Motorola?Android 5.x: Perché Dialog.Builder elimina il testo?

  • rendere il testo più breve non è una soluzione
  • mi aspetto lo stesso comportamento come la S5-screenshot, Bottoni troppo lunghi -> I pulsanti sotto l'altro

dispositivo: Motorola Moto G/OS: Android 5.0.2 enter image description here

dispositivo: Galaxy S5/OS: Android 5.0.2 enter image description here

Ecco il codice e il tema per visualizzare la finestra di

public void showDialog(final String title, final String message, 
         final OnClickListener onClickPositive, 
         final OnClickListener onCLickNegative, final String positiveButton, 
         final String negativeButton, final boolean cancelable) { 
    if (!isFinishing()) { 
     runOnUiThread(new Runnable() { 

      @Override 
      public void run() { 

       if (dialog != null && dialog.isShowing()) { 
        dialog.cancel(); 
       } 

       Builder builder; 
       if (android.os.Build.VERSION.SDK_INT >= 14) { 
        builder = new AlertDialog.Builder(new ContextThemeWrapper(
          MyActivity.this, 
          android.R.style.Theme_DeviceDefault_Light_Dialog)); 
       } else { 
        builder = new Builder(MyActivity.this); 
       } 

       if (title != null) { 
        builder.setTitle(title); 
       } 
       if (message != null) { 
        builder.setMessage(message); 
       } 

       if (positiveButton != null) { 
        builder.setPositiveButton(positiveButton, onClickPositive); 
       } 
       if (negativeButton != null) { 
        builder.setNegativeButton(negativeButton, onCLickNegative); 
       } 
       builder.setCancelable(cancelable); 

       dialog = builder.show(); 
       colorizeDialog(dialog); 
      } 
     }); 
    } 
} 

//theme-xml 
<style name="Theme.DeviceDefault.Light.Dialog" parent="Theme.Holo.Light.Dialog" > 
    <item name="android:windowTitleStyle">@android:style/DialogWindowTitle.DeviceDefault.Light</item> 
    <item name="android:windowAnimationStyle">@android:style/Animation.DeviceDefault.Dialog</item> 

    <item name="android:buttonBarStyle">@android:style/DeviceDefault.Light.ButtonBar.AlertDialog</item> 
    <item name="borderlessButtonStyle">@android:style/Widget.DeviceDefault.Light.Button.Borderless.Small</item> 

    <item name="textAppearance">@android:style/TextAppearance.DeviceDefault.Light</item> 
    <item name="textAppearanceInverse">@android:style/TextAppearance.DeviceDefault.Light.Inverse</item> 
</style> 

########################

UPDATE EDIT

Sembra come, il comportamento non è lo stesso su ogni dispositivo. Abbiamo un secondo problema, con l'aggiunta del pulsante "neutrale". Ancora una volta, Galaxy S5 aggiunta di pulsanti sotto l'altro (dall'alto verso il basso: positiv, neutro, negativo)

enter image description here

Motorola Moto G (API 5.0.2/lato sinistro) mostra Button neutro al centro (rosso "Abbrechen") e taglia nuovamente il testo del pulsante (freccia blu).

Nexus 4 (API 4.3/lato destro) mostra il pulsante neutro sul lato sinistro, invece che in mezzo

Sembra che dobbiamo implementare una finestra di dialogo personalizzata ....

+0

Penso che il problema sia che la lunghezza del testo supera la lunghezza della finestra. Non puoi mettere un testo più a lungo di quella dimensione del contenitore. – Giuseppe

+0

@ Giuseppe: Sì, il testo è troppo lungo. Il problema è, perché Galaxy S5 gestisce questo diritto (i pulsanti sono mostrati sotto l'altro), mentre questo comportamento previsto non funziona su Motorola ?! – longilong

+0

ah ok, non hai specificato questo. Ho pensato che fosse la tua alternativa per risolvere questo problema. Forse il problema è nel tuo ascoltatore e la macchina crea il codice sbagliato! Cosa sono onClickPositive e onClickNegative? – Giuseppe

risposta

0

Hai provato a usare Dialog?

final Dialog dialog = new Dialog(context); 
dialog.setContentView(R.layout.custom); 
dialog.setTitle("Title..."); 

// set the custom dialog components - text, image and button 
TextView text = (TextView) dialog.findViewById(R.id.text); 
text.setText("Android custom dialog example!"); 

// make 3 buttons instead of one 
Button dialogButton = (Button) dialog.findViewById(R.id.dialogButtonOK); 
// if button is clicked, close the custom dialog 
dialogButton.setOnClickListener(new OnClickListener() { 
@Override 
public void onClick(View v) { 
    //do something 
    } 
}); 

dialog.show(); 

consiglio: utilizzare il layout lineare per il dialogo.

Problemi correlati