2010-11-11 13 views
4

J'essaie de développer une application pour laquelle je souhaite prendre en charge plusieurs écrans. J'ai lu l'article Android sur les meilleures pratiques pour le support de plusieurs écrans. Selon l'article, nous devons suivre 3 choses importantes:Problèmes de mise en page liés à la prise en charge de plusieurs écrans

  1. Mention de la prise en charge de différentes tailles d'écran (grandes, moyennes et petites) et de toute densité dans AndroidManifest.xml.
  2. Placez les images de 3 dpi (120, 160, 240) dans 3 dossiers res/ldpi, res/mdpi et res/hdpi.
  3. Dans les dispositions, la dimension doit être mentionnée dans les unités "dip". Ensuite, Android prendra soin de la mise à l'échelle de son propre chef.

J'ai implémenté tous ces points dans mon projet. Les images sont récupérées correctement dans les dossiers appropriés. Mais les dispositions des contrôles ne sont pas les mêmes.

par exemple. J'ai couru l'application sur trois émulateurs


1. Résolution 240 * 320 dpi 120.
2. Résolution 240 * 320 dpi 160.
3. Résolution 240 * 320 dpi
240. (Tous les émulateurs ont même résolution mais densité différente.)

Le problème est que la position des commandes n'est pas la même sur les trois émulateurs. Selon ma compréhension si l'android: layout_marginLeft and android: layout_marginTop sont mentionnés dans "dip" alors ce problème ne devrait pas se produire. Lorsque la densité de l'émulateur augmente, les contrôles sont placés plus vers la droite.

Est-il absolument nécessaire que je fournisse des dispositions pour toutes les combinaisons de dimension et de densité d'écran même si la disposition est la même pour tous les dispositifs?

Est-ce que je manque un point important?

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <ImageView android:layout_width="fill_parent" 
     android:layout_height="fill_parent" android:src="@drawable/bgd" android:scaleType="fitXY"> 
    </ImageView> 
    <ImageView android:id="@+id/wtButton" 
     android:layout_width="wrap_content" android:layout_height="wrap_content" 
     android:src="@drawable/button" android:layout_marginLeft="170dip" 
     android:layout_marginTop="9dip"></ImageView> 
    <ImageView android:id="@+id/htButton" 
     android:layout_width="wrap_content" android:layout_height="wrap_content" 
     android:src="@drawable/button2" android:layout_marginLeft="220dip" 
     android:layout_marginTop="90dip"></ImageView> 
</RelativeLayout> 

Images:

https://docs.google.com/leaf?id=0By3GYC3k5AMDNzUwNjkwMWEtOGQzZC00MjQ0LWE2OTgtYjFhYzZmM2ExOGVl&hl=en&authkey=CLOEsZsI

+2

Pourriez-vous s'il vous plaît poster quelques captures d'écran d'exemple et votre mise en page XML. –

+0

Silly pensée: Vous ne pensez pas qu'il est en réalité mise à l'échelle correctement et juste l'émulateur ne peut pas afficher plusieurs tailles de densité correctement? (ce qui aurait du sens, l'émulateur ne peut pas changer exactement les pixels sur votre écran physique, seulement l'échelle pour 'émuler' les différentes densités) – Dororo

+0

Avait le même problème, aucune chance de trouver la réponse – Snake

Répondre

0

D'abord, vous calculer la hauteur de l'appareil et la largeur

alors si tu veux mettre 180 en tant que valeur leftpadding et 48 en tant que valeur toppadding pour une vue, puis définissez comme

(320 /1,8 = 1,77)

meterView.setPadding ((int) (largeur/1.8), (int) (hauteur/10), 3, 5);

essayez ceci.

0

Le problème est dû au fait que la taille des périphériques augmente la taille de l'image. Redimensionnez vos images en conséquence (augmentez la taille de l'image mdp et ldpi). Si vous voulez cibler la série Nexus, il ciblera toujours Xhdpi et hdpi, ce qui est très pénible. vous pouvez également consulter ma réponse ici: Android: support multiple screens

+0

J'ai des dispositions différentes pour chacun, mais toujours ne fonctionne pas. http://stackoverflow.com/questions/34378238/landscape-mode-for-app –

3

Oui, vous devez ajouter la chose suivante dans le fichier manifeste alors seulement il prendra les Resorces du LDPI, mdpi, orhdpi selon le besoin

<supports-screens 
     android:largeScreens="true" 
     android:normalScreens="true" 
     android:resizeable="true" 
     android:smallScreens="true" 
     android:xlargeScreens="true" /> 

    <compatible-screens> 
<screen 
      android:screenDensity="mdpi" 
      android:screenSize="mediaum" />  
    <screen 
      android:screenDensity="hdpi" 
      android:screenSize="large" /> 
     <screen 
      android:screenDensity="xhdpi" 
      android:screenSize="large" /> 
    </compatible-screens> 
+0

J'ai différentes mises en page pour chacune, mais ne fonctionne toujours pas. http://stackoverflow.com/questions/34378238/landscape-mode-for-app –