7
votes

Comment garder le rapport de format fixe pour un bouton de Android

J'ai un ensemble de boutons dans une mise en page horizontale. J'ai défini une image destinée à l'arrière-plan pour chacun de ces boutons. Mais lorsque je fais la mise en page linéaire pour couvrir la largeur de l'écran, les boutons perdent leur rapport d'image. Je veux garder son rapport de forme tel quel. Je veux dire que je dois le garder carré en forme de place à l'époque quelle est la résolution de l'écran. Comment puis-je faire ceci. Toute suggestion est appréciée.

Voici mon xml xxx

merci


2 commentaires

Avez-vous essayé de supprimer l'attribut Android: Hauteur = "50DIP" Tout d'abord?


Ouais, j'ai essayé de le retirer. Mais n'a pas fonctionné.


4 Réponses :


3
votes

Je donne une amélioration à votre XML. Je n'ai pas testé cela, mais cela devrait fonctionner. Les modifications suggérées sont au lieu de définir l'image comme arrière-plan, définissez-la comme SRC pour imagebuttons. De plus, si vous insiste sur le bouton, vous pouvez envelopper chacun des boutons avec une autre disposition et définir sa propriété de gravité sur "Centre". Jetez un coup d'œil sur le XML suivant.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/main_background"
    android:baselineAligned="false"
    android:orientation="vertical" >
    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/answer_bg"
        android:padding="10dip" >
<LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center" >
            <Button
                android:id="@+id/b2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/img_background"
                android:height="50dip"
                android:text="@string/x"
                android:textStyle="bold" /></LinearLayout>
<LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center" >
            <Button
                android:id="@+id/b3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/img_background"
                android:height="50dip"
                android:text="@string/x"
                android:textStyle="bold" /></LinearLayout>
<LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center" >
            <Button
                android:id="@+id/b4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/img_background"
                android:height="50dip"
                android:text="@string/x"
                android:textStyle="bold" /></LinearLayout>
    </LinearLayout>
</LinearLayout>


3 commentaires

D'accord. Ça a marché. Mais il y avait des problèmes. Lorsque j'ai supprimé le paramètre 50DIP, cela fonctionne bien. Pouvez-vous me dire ce qu'Android: paramètre layout_weight signifie?


Cela signifie simplement que la mise en page peut couvrir la taille maximale disponible par rapport aux autres. Dites s'il y a deux mises en page avec Android: layout_weight = "1" Ils partageront l'écran de manière égale. Lire la suite: développeur.android.com/reference/android/widget/ ...


Merci! Réglage de l'attribut SRC au lieu de fond fait la différence.



0
votes

Si vous voulez que la forme carrée exacte signifie que vous devez définir la largeur et la hauteur de la même valeur.

Si vous souhaitez installer tous les 3 boutons avec une forme égale dans la mise en page horizontale, quelles que soient les résolutions de l'écran, utilisez layout_weight = 1 . À ma connaissance des mises en page, seule c'est la solution.


2 commentaires

Mais, je ne peux pas définir la taille de la mise en page. Signifie que je les ai à évoluer sur des résutions plus importantes.


Ne pensez pas à l'échelle, poids = 1 signifie qu'il définira la taille en fonction des dimensions de l'écran. Vérifiez d'abord les suggestions / réponses, alors vous aurez une idée à ce sujet.



0
votes

Ici, j'utilise ici Poids pour la mise en page Vous pouvez essayer comme ça.Se Weighpsum pour la mise en page linéaire, puis réglez la largeur de bouton sous forme de 0 dP et de poids en fonction de votre besoin.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/main_background"
    android:baselineAligned="false"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/answer_bg"
        android:padding="10dip"
        android:weightSum="1" >

        <Button
            android:id="@+id/b2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight=".33"
            android:background="@drawable/img_background"
            android:text="@string/x"
            android:textStyle="bold" />

        <Button
            android:id="@+id/b3"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight=".33"
            android:background="@drawable/img_background"
            android:height="50dip"
            android:text="@string/x"
            android:textStyle="bold" />

        <Button
            android:id="@+id/b4"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight=".33"
            android:background="@drawable/img_background"
            android:text="@string/x"
            android:textStyle="bold" />
    </LinearLayout>

</LinearLayout>


0 commentaires

0
votes
<ImageButton
                android:layout_marginBottom="4dp"
                android:layout_marginLeft="4dp"
                android:layout_marginRight="2dp"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="0.3"
                android:adjustViewBounds="true"
                android:background="@color/white"
                android:scaleType="fitCenter"
                android:src="@mipmap/all"></ImageButton>
Scale type fitCenter includes full image within button.
3 Image buttons are nested inside horizontal linear layout and each was given weight=1.
Making adjustViewbounds= true, prevented unnecessary stretch of button.

0 commentaires