[OFFEN] DatePickerDialog Kalenderansicht unvollständig

E

enrem

Erfahrenes Mitglied
29
Hallo! Im Emulator von API 21 bis API 25 wird bei mir der DatePickerDialog wie gewünscht als Kalender angezeigt. Bei meinem Huawai bis vor kurzem auch noch. Dann ist was passiert, was ich nicht verstehe. Ich habe den Code bezüglich des Styles oder Themes nicht mehr angepackt. Dennoch bekomme ich nun beim Huawai (API 24) nur noch den Spinner statt den Kalender angezeigt. Schaut mal im Bild. Beim Emulator (EM_API_24.png) ist es so wie ich es wünsche und beim Bild (Huawai_API_24.png) wird nun der Spinner angezeigt.

Wenn ich das recht verstehe sollte doch beim Theme Material (ab API 21) der Kalender beim Picker angezeigt werden. Da es nur im Emulator funktioniert, dachte ich mir diesen zwangsweise darzustellen.

Code:
DatePickerDialog dpd = new DatePickerDialog(this...usw...);
                dpd.getDatePicker().setSpinnersShown(false);
                dpd.getDatePicker().setCalendarViewShown(true);

Das Ergebniss ist echt verwirrend. Schaut mal das Bild (API_24_setCalendarViewShown.png) Links ist mein Huawai und rechts der Emulator. Zunächst dachte ich es liegt am Platz bzw. an der Bildschirmgröße des Huawais. Zu wenig Platz also wird der Kopf oben nicht angezeigt und daher ist auch die untere Zahlenreihe nur halb zu sehen.

Ein anderes Programm, scheint das aber gelöst zu haben. Schaut mal (WunschDatePicker.png). Habt Ihr eine Ahnung wie ich den Kalender vernünftig wieder angezeigt bekomme?

Zum Style kann ich noch folgenden Code anfügen.
Code:
V21/styles.xml

<resources>

    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
    </style>

    <style name="MyStyle" parent="@android:style/Theme.Material.NoActionBar">
        <item name="toolbarStyle">@android:style/ThemeOverlay.Material.Dark.ActionBar</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
        <item name="toolbarStyleOverlay">@style/AppTheme.PopupOverlay</item>
        <item name="toolbarBackground">?attr/colorPrimary</item>
    </style>

    <style name="MyStyle.Light" parent="@android:style/Theme.Material.Light.NoActionBar">
        <!--Hier das selbe Problem bei Hell wird die Actionbar/Toolbar nicht richtig
         dargestellt daher mache ich die dunkel mit Material.DarkMaterial.Dark-->
        <item name="toolbarStyle">@android:style/ThemeOverlay.Material.Dark.ActionBar</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
        <item name="toolbarStyleOverlay">@style/AppTheme.PopupOverlay</item>
        <item name="toolbarBackground">?attr/colorPrimary</item>
    </style>

</resources>

und Aufgerufen wird der Style bei mir mit

Code:
setTheme(android.R.style.Theme_Material_Light);

// oder

setTheme(android.R.style.Theme_Material);

EM_API_24.png Kalender wird angezeigt (korrekt)
EM_API_24.png

Huawai_API_24.png Kalender wird nicht angezeigt (warum?)
Huawai_API_24.png

API_24_setCalendarViewShown.png links Huawai rechts Emulator. Im Code setSpinnersShown(false) und setCalendarViewShown(true) verwendet. Kalender wird unvollständig dargestellt.
API_24_setCalendarViewShown.png

WunschDatePicker.png von einem Fremden Programm auf meinem Huawai. Scheint also Platz für ein DatePickerDialog zu sein.
WunschDatePicker.png
 
Zuletzt bearbeitet:
Hi, ich finde dein Problem auch ein wenig komisch.

Beim Emulator sieht es für ich aber so aus, alls ob er mehr DPI hat. Kannst du mal einen Emulator nehmen, welcher genau deine Geräteigenschaften hat?
Dann müsste der Fehler dort auch auftauchen.

Bei dem fremden Programm sehen für mich die Zahlen auch kleiner aus als bei deinem Huawai-Screenshot. Vielleicht doch eine Größensache?
 
Ja das ist echt irre. Ich habe die DPI im Emulator mal geändert.

In allen Versionen wird der Kalender angezeigt. Sogar mit 480x800 dpi.
ice_screenshot_20170712-115917.png

Hier das Ergebnis mit 480x800 dpi
ice_screenshot_20170712-115842.png

Also kann es nicht an der Bildschirmgröße liegen. Auf den beiden Tablets (Hardware) wird auch der Kalender angezeigt. Wie hier im Bild. Auf dem Huawai Honor 8 und dem P9 lite (Hardware) wird der Slider wie oben im Bild (Huawai_API_24.png) dargestellt.

Ich hab keine Ahnung wo ich da ansetzen kann.
 
Sehr komisch. Also ich an deiner Stelle würde die APK von der App, wo es funktioniert jetzt decompilen und die Unterschiede anschauen. (Ich weiß zwar nicht, ob Dekompilen noch so einfach ist wie vor 8 Jahren, aber damals hat es bei mir gut geklappt)

Mehr fällt mir auch nicht ein.
 
  • Danke
Reaktionen: enrem
Danke für den Tipp. Wäre eine Option wenn deren Code nicht verschleiert wurde. Ich werde weiter suchen und hoffe noch auf Ideen...
 
Hallo enrem :

Die Auflösung ist NICHT DPI und ich denke dass da der Hund begraben ist.

Die UI Elemente beziehen sich sehrwahrscheinlich nur auf dp und nicht auf die tatsächliche Grösse.
Abhilfe kann man nur dadurch erreichen , in dem man die Berechnungen abhängig von der dpi / grösse macht

Anpassungen musst du dann im Layout und im Source durchführen
 
Zuletzt bearbeitet:
Hallo swa00,

hast du noch einen Tipp für mich wonach ich da am besten google? Ich kann glaube ich beim DatePickerDialog ein Layout angeben. Ich meine das war der zweite Parameter. Ich vermute das meinst du mit Layout und im Source anpassen. Ist das richtig?

Bin unterwegs, schaue zuhause gleich nochmal wie das mit dem Layout ist.
 
hallo enrem,

die Angabe des Layouts wird dich nicht so weit bringen , das ist immer das "Problem" wenn
man vorgefertigte Bausteine verwendet. Diese sind i.d.R nur rudimenär.

Wenn du das beheben möchtest , dann nimm dir eine Bibliothek, die das berücksichtigt,
oder erstelle Dir deinen eigenen Controll.

Ansonsten musst du leider damit Leben.

P.S ich gehe mittelweile hin und berechne mir meine Grössen und Plazierungen nur noch per Source

Wir hatten schonmal das ausschweifende Thema :)
Verständnisprobleme beim Layout
 
  • Danke
Reaktionen: enrem
Achduje, dass erinnert mich an alte DOS-Zeiten :blink:

Soviel Zeit und vorallem Gehirnschmalz wollte ich dafür doch nicht aufbringen. Ich schaue mir dennoch mal deinen empfohlenen Artikel an. Da sich bisher bei meiner App kaum jemand beschwert hat, werde ich es wahrscheinlich dabei belassen.
 
Da sich bisher bei meiner App kaum jemand beschwert hat, werde ich es wahrscheinlich dabei belassen.

Das wollte ich auch "durch die Blume" damit zum Ausdruck bringen :)
 
Also ich finde das Thema noch nicht erledigt.
Für mich sieht es so aus, als ob der Entwicker der App, welche das Wunschergebnis auf dem Huawai darstellt auch die normale Komponente benutzt. Nur bei ihm sind die Buchstaben unten beim "Abbrechen" , "Ok" kleiner.
@enrem : Kannst du irgendwo eine Größe bei der Komponente hinterlegen? Ich kenne die jetzt leider nicht ganz so gut.
 
@Kardroid

Ich bin nicht davon ausgegangen , dass der TE noch Gesprächsbedarf hatte :)

Thread ist auf Offen ....
 
Hallo ihr beiden,

wenn es eine nicht zu aufwändige Möglichkeit gibt mein Problem zu lösen, bin ich natürlich für jeden Hinweis dankbar.

Ich wüsste jetzt nicht ob ich da irgendwo eine größe für Komponenten angeben kann.

Ich habe mir nun aus dem SDK den DatePickerDialog.java angeschaut. Dort wird

Code:
final View view = inflater.inflate(R.layout.date_picker_dialog, null);
        setView(view);

Aufgerufen. Dann habe ich mir die XML des Layouts angeschaut:

F:/Android/android-sdk/platforms/android-25/data/res/layout-sw600dp/date_picker_dialog.xml
Code:
<DatePicker xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/datePicker"
    android:layout_gravity="center_horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:spinnersShown="true"
    android:calendarViewShown="true"
    android:dialogMode="true" />

F:/Android/android-sdk/platforms/android-25/data/res/layout/date_picker_dialog.xml
Code:
<DatePicker xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/datePicker"
    android:layout_gravity="center_horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:spinnersShown="true"
    android:calendarViewShown="false"
    android:dialogMode="true" />

Beim ersten wird der Kalender angezeigt (sw600dp) und beim zweiten Layout der Spinner. wofür steht sw? 600dp? bedeutet das ab 600dpi ?
 
Zuletzt bearbeitet:
Ich konnte jemanden finden der das gleiche Problem hatte.

Why DatePickerDialog is using spinner view after updating to android 7.0
Leider hat es bei mir nicht funktioniert. Hier ein Auszug meiner build.gradle

Code:
apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25"
    defaultConfig {
        applicationId "de.enrem.appid"
        minSdkVersion 16
        targetSdkVersion 25
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile files('libs/jxl.jar')
    compile files('libs/dropbox-android-sdk-1.6.3.jar')
    compile files('libs/httpmime-4.0.3.jar')
    compile files('libs/json_simple-1.1.jar')
    compile 'com.android.support:appcompat-v7:25.3.0'
    compile 'com.android.support:design:25.3.0'
    compile 'com.google.android.gms:play-services-appindexing:8.4.0'
    compile 'com.android.support.constraint:constraint-layout:+'
    testCompile 'junit:junit:4.12'
}

Ich habe alles auf Build 25 gestellt und leider habe immer noch das selbe Problem.
 
Danke Kardroid.

Ich habe im Emulator mal das Display auf die kleinste Größe eingestellt. Dann wird dort wie erwartet der Spinner, wie es die "layout-sw600dp/date_picker_dialog.xml" vorgibt, angezeigt. Bei normaler Größe dann wieder der Kalender. Im Emulator läuft somit alles rund wie es soll.

Total Irre.

Ich habe sogar den Code vom Link oben "Stackoverflow" 1:1 übernommen um sicher zu gehen das ich nichts übersehen habe. Jedoch auch damit die selben Ergebnisse.

Gestern konnte ich die App auf einem S7 und einem Nexus mit Android 6 testen. Wie es soll, wird die Kalenderansicht angezeigt. Nur nicht am Honor 8 oder dem P9 lite. Ob es evtl. am neuen Update von Huawai (Android 7.0) liegt ?
 
Moin enrem,

ich komme nochmal auf das Obige zurück :
Eine kurze und klare Frage an dich :

Auflösung ist NICHT DPI , also welche Unterschiede in der DPI kannst du bei beiden Devices feststellen ?
Und zwar effektiv

Und genau an diesem Punkt musst du ansetzen
 
Zuletzt bearbeitet:
Moin Moin @swa00

Was ich nicht verstehe ist, dass es ja schonmal beim Honor 8 funktioniert hat. Ich kann nur nicht sagen ob es seit dem letzten Firmwareupdate von Android 6 auf Android 7.0 nicht mehr geht.

Ich kann die DPI vergleichen wenn wieder mal jemand mit einem Smartphone wo es geht, vorbei kommt. Habe gerade nur das Honor und ein Tablet zum vergleichen.

Hier das Honor 8 (ohne Kalender nur Slider)
DPI Huawai Honor 8.png

Hier mein Tablet von Asus (mit Kalender)

DPI Asus Tablet.png
 
Hallo enrem ,

also lt dem folgenden link wurde erst vor 10 Monaten der DatePicker angepasst
platform_frameworks_base/core/java/android/widget at master · android/platform_frameworks_base · GitHub

Das soll aber nicht heissen , dass das Honor/Huawei nicht sein eigenes Süppchen kocht und die Berechnung des FrameLayouts
verändert hat .

Wie oben schon beschrieben ..

Du kannst halt hingegen und deine eigenen DatePicker basteln und den der DPI zur Laufzeit anpassen .
Dann bist du dir zumindest auf der sicheren Seite.
 
Vielen Dank swa00,

ich werde wohl mit dem Spinner leben müssen :winki:. Ist ja kein wirklicher Fehler, sondern statt eines Kalenders, wird halt der Spinner angezeigt. Sollte der Kalender einmal unvollständig (fehlerhaft) angezeigt werden, können die User bei mir immer noch das Holo-Design (mit dem Spinner) in den Einstellungen aktivieren.

Einen eigenen DatePicker zu basteln lohnt sich nicht wirklich. Im Moment ärgere ich mich mit der Dropbox. Habe dummerweise die veraltete API 1.6 verwendet und nun muss ich alles auf die neue API umzustricken. Zu dumm :blink:
 

Ähnliche Themen

Gemini-Media
Antworten
1
Aufrufe
1.844
swa00
swa00
roid
  • roid
Antworten
6
Aufrufe
1.215
lordzwieback
lordzwieback
kukuk
  • kukuk
Antworten
0
Aufrufe
953
kukuk
kukuk
Zurück
Oben Unten