2015-07-20 4 views
17

Ich habe ein Problem mit der Dialog.Builder, wo die Tasten abgeschnitten sind. Wie kann ich dies beheben oder ist dies ein Problem für Motorola-Geräte?Android 5.x: Warum schneidet Dialog.Builder den Text ab?

  • macht den Text kürzer ist keine Lösung
  • ich das gleiche Verhalten wie der S5-Screenshot, Buttons zu lang erwarten -> Tasten untereinander

Gerät: Motorola Moto G/OS: Android 5.0.2 enter image description here

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

Hier ist der Code und Themen für den Dialog zeigt

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

Scheint, das Verhalten auf jedem Gerät ist nicht das gleiche. Wir haben ein zweites Problem, indem wir den "neutralen" Knopf hinzufügen. Wiederum Galaxy S5 Tasten untereinander Zugabe (von oben nach unten: positiv, neutral oder negativ)

enter image description here

Motorola Moto G (API 5.0.2/links) zeigt neutral Knopf in die Mitte (rotes "Abbrechen") und schneidet erneut den Schaltflächentext (blauer Pfeil).

Nexus 4 (API 4.3/rechte Seite) zeigt die neutrale Taste auf der linken Seite, statt in der Mitte

Scheint, wie wir einen benutzerdefinierten Dialog zu implementieren ....

+0

Ich denke, das Problem ist, dass die Textlänge Fensterlänge überschreitet. Sie können keinen Text länger als diese Container-Dimension einfügen. – Giuseppe

+0

@Giuseppe: Ja, der Text ist zu lang. Das Problem ist, warum behandelt Galaxy S5 dieses Recht (Schaltflächen untereinander gezeigt), während dieses erwartete Verhalten nicht auf Motorola funktioniert ?! – longilong

+0

ah ok, du hast das nicht angegeben. Ich dachte, es wäre deine Alternative, um dieses Problem zu lösen. Vielleicht liegt das Problem an Ihrem Hörer und die Maschine baut den Code falsch! Was sind onClickPositive und onClickNegative? – Giuseppe

Antwort

0

Haben Sie versucht, stattdessen Dialog zu verwenden?

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(); 

Empfehlung: Verwenden Sie das lineare Layout für den Dialog.

Verwandte Themen