2010-01-21 6 views
1

Outre le dossier du res/layout général j'ai un dossier res/layout-v3 pour la compatibilité descendante avec Android 1.5, ce qui a des problèmes avec certains RelativeLayout mises en page.Android 2.1 bug: utilisations res/layout-v3 au lieu de résolution/mise en page

Fonctionne parfaitement avec tous les téléphones et versions d'émulation testés, donc . Sauf 2.1 (émulateur et Nexus One). Ils choisissent d'afficher la mise en page Android 1.5 (res/layout-v3) au lieu de la valeur par défaut res/ layout.

Quelqu'un d'autre peut-il confirmer cela? Est-ce un bug du système d'exploitation Android? Si oui, où est le meilleur endroit pour soumettre le rapport de bogue?


MISE À JOUR:

Après avoir lu sur https://developer.android.com/guide/practices/screens_support.html#qualifiers à nouveau (merci Mark pour l'indice), en particulier cette partie

Les ressources qui devraient être utilisées que sur une API spécifique Niveau ou plus. Par exemple, si votre application est conçue pour fonctionner à la fois sur Android 1.5 (API Niveau 3) et Android 1.6 (API Niveau 4 et supérieur), vous pouvez utiliser le qualificatif -v4 pour marquer les ressources qui doivent être exclues lorsque votre application s'exécute sur Android 1.5 (niveau API 3).

je changé ma mise en page afin d'avoir

  • res/layout-v3 (pour Android 1.5 seulement -> ce fut une fausse supposition que je fait)
  • res/mise en page (pour quoi que ce soit d'autre)

à ma nouvelle configuration d'avoir:

  • res/laïcs out-v4 (pour Android 1.6 et versions ultérieures)
  • res/layout (pour toute autre chose -> dans ce cas, ce serait Android 1.5 seulement)

Si je comprends bien le droit de documentation ci-dessus et si mes hypothèses les parenthèses sont correctes cette fois cela devrait fonctionner maintenant. Cependant, le résultat est le suivant:

  • Android 1.5 utilise res/layout -> OK
  • Android 1.6 utilise res/layout-v4 -> OK
  • Android 2.0 utilise res/layout - >pAS OK
  • Android 2.1 est à l'aide res/layout-v4 -> OK

Alors pourquoi est Android 2.0 (sur les deux Emulator et Motorola Milestone) ne pas choisir le dossier de ressources de mise en page à droite?

Je l'ai testé puis à nouveau avec 2.0.1 et il semble fonctionner là. Donc, ça semble être un bug dans 2.0 qui a été corrigé dans 2.0.1

Mais maintenant la chose la plus étrange: pour le faire fonctionner sur 2.0 j'ai copié le dossier res/layout-v4 dans res/layout-v5 forcer Android 2.0 en utilisant cette ressource de mise en page. N'a pas fonctionné. Mais ensuite j'ai essayé de le copier sur res/layout-v6 (qui est censé être Android 2.0.1) et voilà tout d'un coup ça marche avec 2.0. Très étrange! Mais j'espère que cette solution aidera quelques autres personnes.

+1

Sur le dernier point, http://b.android.com est le suiveur de problème officiel. Si vous pouvez attacher ou pointer vers un ensemble de code source reproduisant le problème, cela accélérera l'analyse. – CommonsWare

Répondre

4

J'ai testé plusieurs périphériques et émulateurs (mais pas très complètement), et il semble que le dossier de ressources sélectionné est celui avec la version supérieure < = version de l'appareil.

+4

Pour développer la réponse de M. Milano, res/layout-v3 devrait être utilisé par tout ce qui tourne sous Android 1.5 ou supérieur. res/layout serait utilisé par Android 1.1 ou 1.0. Consultez http://developer.android.com/guide/practices/screens_support.html#qualifiers pour plus de détails ("Ressources utilisables uniquement sur un niveau d'API spécifique ou supérieur. Par exemple, si votre application est conçue pour s'exécuter sur les deux niveaux. Android 1.5 (niveau API 3) et Android 1.6 (niveau API 4 et supérieur), vous pouvez utiliser le qualificateur -v4 pour marquer les ressources qui doivent être exclues lorsque votre application est exécutée sur Android 1.5 (niveau 3 de l'API). – CommonsWare

+0

Merci pour l'indice Mark et dtmilano. Cela a aidé à résoudre le problème et à créer une solution de contournement pour le bogue. Voir ma mise à jour dans ma question ci-dessus. – znq