2016-04-01 7 views
1

Ich verwende derzeit eine AlertDialog, um den Benutzer aufzufordern und um eine Bewertung bitten. Es funktioniert genau so, wie ich es bei Verwendung des AS-Emulators (Nexus 5 API 23) erwarten würde.AlertDialog Button Text Formatierung ist komplett falsch bei einigen Geräten

Von Emulator:

enter image description here

Allerdings habe ich den Dialog getestet heraus Gerät meines Freundes, ein LG Stylo (Android 5.1.1, Api 22) und die Formatierung ist völlig falsch. Die Schaltflächen sind in der falschen Reihenfolge und sind nicht korrekt formatiert.

Von LG Stylo:

enter image description here

Ich bin nicht sicher, wie sichergestellt zu gehen, dass die Formatierung für ein AlertDialog richtig ist, und ich habe ehrlich gesagt keine Ahnung, warum die Formatierung nicht korrekt auf dem LG Stylo, und leider habe ich kein anderes Gerät, um es derzeit zu testen.

Vielen Dank im Voraus!

AlertDialog.Builder builder = new AlertDialog.Builder(mContext); 
     builder.setMessage(R.string.rateMeText) 
       .setPositiveButton(R.string.rateMe, new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         Intent intent = new Intent(Intent.ACTION_VIEW); 
         editor.putBoolean(KEY_REMIND_ME_LATER, false); 
         editor.commit(); 
         try { 
          intent.setData(Uri.parse(myContext.getString(R.string.playStoreMarketLink) + APP_PNAME)); 
          myContext.startActivity(intent); 
         }catch (Exception e){ 
          intent.setData(Uri.parse(myContext.getString(R.string.playStoreHttpLink) + APP_PNAME)); 
          myContext.startActivity(intent); 

         } 
         dialog.dismiss(); 
        } 
       }) 
       .setNegativeButton(R.string.noThanksAndDoNotAskAgain, new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         if (editor != null) { 
          editor.putBoolean(KEY_REMIND_ME_LATER, false); 
          editor.commit(); 
          /*editor.putBoolean(KEY_DONT_SHOW_AGAIN, true);*/ 
          editor.commit(); 
         } 
         dialog.dismiss(); 
        } 
       }) 
       .setNeutralButton(R.string.remindMeLater, new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         editor.putLong(KEY_LAUNCH_COUNT_PRESSED_REMIND, launches); 
         editor.putBoolean(KEY_REMIND_ME_LATER, true); 
         editor.commit(); 
         System.out.print(sharedPrefs.getLong(KEY_LAUNCH_COUNT_PRESSED_REMIND, 27727)); 
         dialog.dismiss(); 
        } 
       }); 
     builder.create().show(); 
+0

Haben Sie es auf Emulator mit API 22, d. H. 5.1.1 getestet? –

+0

Verwenden Sie 'android.app.AlertDialog' oder' android.support.v7.app.AlertDialog'? –

+0

Wenn Sie keinen Stil festlegen, verwendet das Gerät manchmal seinen eigenen Standardstil, auch wenn Sie das Apps-Design festlegen. Es ist eine Art Mist-Shooting, wenn Sie keine Stile setzen. –

Antwort

3

Sie haben einen Stil zu kreieren einem bestehenden als Elternteil verwenden und es dann in dem AlertDialog.Builder() -Methode verwenden.

Es würde wie folgt aussehen:

<style name="myAlertStyle" parent="AlertDialog.Material"> 
    <item name="fullDark">@empty</item> 
    <item name="topDark">@empty</item> 
    <item name="centerDark">@empty</item> 
    <item name="bottomDark">@empty</item> 
    <item name="fullBright">@empty</item> 
    <item name="topBright">@empty</item> 
    <item name="centerBright">@empty</item> 
    <item name="bottomBright">@empty</item> 
    <item name="bottomMedium">@empty</item> 
    <item name="centerMedium">@empty</item> 
    <item name="layout">@layout/alert_dialog_material</item> 
    <item name="listLayout">@layout/select_dialog_material</item> 
    <item name="progressLayout">@layout/progress_dialog_material</item> 
    <item name="horizontalProgressLayout">@layout/alert_dialog_progress_material</item> 
    <item name="listItemLayout">@layout/select_dialog_item_material</item> 
    <item name="multiChoiceItemLayout">@layout/select_dialog_multichoice_material</item> 
    <item name="singleChoiceItemLayout">@layout/select_dialog_singlechoice_material</item> 
</style> 

und dann würden Sie nur verwenden AlertDialog.Builder() wie folgt aus:

AlertDialog.Builder(mContext, R.style.myAlertStyle); 
+0

Übrigens können Sie immer in der SDK auf Ihrem Computer suchen und sehen, wie alle Standardstile erstellt werden. Das ist, wo ich dieses Beispiel bekommen habe :) Sie leben in 'pathToYourSdk/sdk/plattformen/android - ##/data/res/values ​​/' –

1

Es ist erwähnenswert, dass diese ziemlich viel ist ein Fehler in der api-22 Support-Bibliothek, da versucht wird, alle Schaltflächen in einer Zeile zu platzieren. Es wurde in der api-23 Support-Bibliothek behoben, indem mit jeder Taste in der eigenen Zeile auf das neue Layout umgeschaltet wurde.

Ich habe Ihren Code mit einer Support-Bibliothek AlertDialog und auf einem Gerät mit KitKat 4.4.4 in zwei verschiedenen Projekten getestet.

Der gleiche Code für beiden Tests:

import android.support.v7.app.AlertDialog; 
import android.support.v7.app.AppCompatActivity; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar); 
     setSupportActionBar(toolbar); 

     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setMessage("If you like this app, please rate it on the Google Play Store!") 
       .setPositiveButton("Rate me!", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 

        } 
       }) 
       .setNegativeButton("No thanks and do not ask me again", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 

        } 
       }) 
       .setNeutralButton("Remind me later", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 

        } 
       }); 
     builder.create().show(); 
    } 
} 

Zuerst wird in einem Projekt mit dieser gradle Konfiguration (alle api-22-Einstellungen):

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 22 
    buildToolsVersion "21.1.2" 

    defaultConfig { 
     applicationId "com.example.myapplication" 
     minSdkVersion 15 
     targetSdkVersion 22 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:22.2.1' 
} 

Dies ist das Ergebnis:

enter image description here

Dann in einem anderen Projekt mit dieser Konfiguration Ion (alle api-23-Einstellungen):

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 23 
    buildToolsVersion "21.1.2" 

    defaultConfig { 
     applicationId "com.example.testprojecttwo" 
     minSdkVersion 15 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:23.1.1' 
    compile 'com.android.support:design:23.1.1' 
} 

Dies ist das Ergebnis des gleichen Codes ist:

enter image description here

also eine Lösung für dieses wäre die api-23 Support-Bibliothek zu verwenden .

Verwandte Themen