105 votes

Comment implémenter un androïde: un fond qui ne s'étire pas?

J'ai trouvé ce fil grande décrivant comment "manger le gâteau et l'avoir trop", c'est à dire l'utilisation de l'image pour un Button au lieu de ImageButton (ce qui ne veut pas autoriser SetText(), redimensionnement, etc.).

Ceci est réalisé en utilisant l'attribut de Vue:

android:background="@drawable/bgimage"

Le seul problème, c'est qu'il étire l'image pour l'adapter à la taille du bouton.

Court de coder en dur un bouton fixe la taille (en pixels!), est-il un moyen de dire à Android pas à étirer l'image d'arrière-plan à toutes et agricole et de la pad?

267voto

Santosh Points 3591

Vous pouvez créer un bitamp xml et l'utiliser comme arrière-plan pour la vue. Pour éviter l'étirement, vous pouvez spécifier l'attribut android:gravity .

Exemple:

 <?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/dvdr"
    android:tileMode="disabled" android:gravity="top" >
</bitmap>
 

Il y a beaucoup d'options que vous pouvez utiliser pour personnaliser le rendu de l'image.

http://developer.android.com/guide/topics/resources/drawable-resource.html#Bitmap

29voto

Dr.J Points 944

Vous devez utiliser ImageView si vous ne voulez pas à s'étirer. Les images de fond sera toujours étirer pour s'adapter à la vue. Vous avez besoin de le définir comme un Drawable à la force de l'image à l'objet.

Sinon, si vous êtes collant avec le Bouton idée, alors vous aurez besoin de forcer la mise à l'échelle dans le bouton pour empêcher l'image de l'étirement.

Comme dans votre

OnCreate(Bundle bundle) {
  //set content layout, etc up here

  //now adjust button sizes
  Button B = (Button) findViewById(R.id.somebutton);
  int someDimension = 50; //50pixels
  B.setWidth(someDimension);
  B.setHeight(someDimension);
}

27voto

Adil Malik Points 1754

Utiliser simplement ImageButton au lieu de Button résout le problème.

Solution rapide !! :-)

13voto

Gunnar Bernstein Points 853

J'utilise un ImageView dans un RelativeLayout qui se superpose à ma mise en page normale. Aucun code requis. Il redimensionne l'image à la hauteur totale de l'écran (ou de toute autre disposition que vous utilisez), puis découpe l'image à gauche et à droite pour l'ajuster à la largeur. Dans mon cas, si l'utilisateur allume l'écran, l'image risque d'être un peu trop petite. Par conséquent, j'utilise match_parent, ce qui rend l'image plus large si elle est trop petite.

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<ImageView
    android:id="@+id/main_backgroundImage"
    android:layout_width="match_parent" // comment: stretches picture in the width if too small. 
                                           use "wrap_content" does not stretch, but leaves space
    android:layout_height="match_parent" // in my case I always want the height filled
    android:layout_alignParentTop="true"
    android:scaleType="centerCrop" // will crop picture left and right , so it fits in height and keeps aspect ratio
    android:contentDescription="@string/image"
    android:src="@drawable/your_image" />

<LinearLayout
    android:id="@+id/main_root"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
</LinearLayout>
 

6voto

Serge Bollaerts Points 31

J'ai eu le même problème: vous ne devriez utiliser qu'une image de 9 patchs (.9.png) à la place de votre image d'origine.

Serge

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X