it-swarm.com.de

Bild in ImageButton in Android einpassen

Ich habe 6 ImageButton in meiner Aktivität, ich setze Bilder durch meinen Code darin (ohne xml).

Ich möchte, dass sie 75% des Tastenbereichs abdecken. Da einige Bilder jedoch weniger Fläche umfassen, sind einige zu groß, um in den imageButton zu passen. Wie programmiere ich die Größe und zeige sie programmatisch? Unten ist der Screenshot

enter image description here ist die xml-Datei

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical"
    Android:layout_marginBottom="5sp"
        Android:layout_marginLeft="2sp"
        Android:layout_marginRight="5sp"
        Android:layout_marginTop="0sp"     >
   <LinearLayout
        Android:layout_height="0dp"
        Android:layout_width="match_parent"
        Android:layout_weight="1"
        Android:orientation="horizontal">
        <ImageButton          

            Android:layout_height="match_parent"
            Android:layout_width="0dp"
            Android:layout_weight="1"
            Android:id="@+id/button_topleft"
        Android:layout_marginBottom="5sp"
        Android:layout_marginLeft="2sp"
        Android:layout_marginRight="5sp"
        Android:layout_marginTop="0sp"
            />
        <ImageButton
            Android:layout_height="match_parent"
            Android:layout_width="0dp"
            Android:layout_weight="1"
            Android:id="@+id/button_topright"
    Android:layout_marginBottom="5sp"
        Android:layout_marginLeft="2sp"
        Android:layout_marginRight="5sp"
        Android:layout_marginTop="0sp"
            />
    </LinearLayout>
    <LinearLayout
        Android:layout_height="0dp"
        Android:layout_width="match_parent"
        Android:layout_weight="1"
        Android:orientation="horizontal">

        <ImageButton
            Android:layout_height="match_parent"
            Android:layout_width="0dp"
            Android:layout_weight="1"
            Android:id="@+id/button_repeat"
    Android:layout_marginBottom="5sp"
        Android:layout_marginLeft="2sp"
        Android:layout_marginRight="5sp"
        Android:layout_marginTop="0sp"     
             />

              <ImageButton
            Android:layout_height="match_parent"
            Android:layout_width="0dp"
            Android:layout_weight="1"
            Android:id="@+id/button_next"
    Android:layout_marginBottom="5sp"
        Android:layout_marginLeft="2sp"
        Android:layout_marginRight="5sp"
        Android:layout_marginTop="0sp"     
             />

    </LinearLayout>    
   <LinearLayout
        Android:layout_height="0dp"
        Android:layout_width="match_parent"
        Android:layout_weight="1"
        Android:orientation="horizontal">

        <ImageButton
            Android:layout_height="match_parent"
            Android:layout_width="0dp"
            Android:layout_weight="1"
            Android:id="@+id/button_bottomleft"
    Android:layout_marginBottom="5sp"
        Android:layout_marginLeft="2sp"
        Android:layout_marginRight="5sp"
        Android:layout_marginTop="0sp"                                 
             />
        <ImageButton
            Android:layout_height="match_parent"
            Android:layout_width="0dp"
            Android:layout_weight="1"
            Android:id="@+id/button_bottomright"
    Android:layout_marginBottom="5sp"
        Android:layout_marginLeft="2sp"
        Android:layout_marginRight="5sp"
        Android:layout_marginTop="0sp"                  
            />        
    </LinearLayout>        

</LinearLayout>

und ein Ausschnitt vonmyClass.Java: 

public void addImageButtons()
    {
        iB_topleft = (ImageButton) findViewById(R.id.button_topleft);
        iB_topright = (ImageButton) findViewById(R.id.button_topright);
        iB_bottomleft = (ImageButton) findViewById(R.id.button_bottomleft);
        iB_bottomright = (ImageButton) findViewById(R.id.button_bottomright);
        iB_next = (ImageButton) findViewById(R.id.button_next);
        iB_repeat = (ImageButton) findViewById(R.id.button_repeat);
    }

    public void setImageNextAndRepeat()
    {

    iB_topleft .setImageResource(R.drawable.aa);
        iB_topright.setImageResource(R.drawable.bb);   

    iB_bottomleft.setImageResource(R.drawable.cc);
        iB_bottomright.setImageResource(R.drawable.dd);   

        iB_next.setImageResource(R.drawable.next);
        iB_repeat.setImageResource(R.drawable.repeat);      
    }
118
RDX

Ich möchte, dass sie 75% des Tastenbereichs abdecken. 

Verwenden Sie Android:padding="20dp" (passen Sie die Auffüllung nach Bedarf an), um zu steuern, wie viel das Bild für die Schaltfläche beansprucht.

einige Bilder sind jedoch zu groß, um in den ImageButton zu passen. Wie programmiere ich die Größe und zeige sie?

Verwenden Sie einen Android:scaleType="fitCenter", damit Android die Bilder skaliert, und Android:adjustViewBounds="true", damit sie ihre Grenzen aufgrund der Skalierung anpassen können. 

Alle diese Attribute können zur Laufzeit auf jedem ImageButton in Code gesetzt werden. Meiner Meinung nach ist es jedoch viel einfacher, das Einstellen und die Vorschau in XML vorzunehmen.

nicht verwenden Sie sp für andere als die Textgröße. Die Skalierung erfolgt abhängig von der vom Benutzer festgelegten Textgrößeneinstellung. Wenn Sie also eine "große" Texteinstellung haben, sind Ihre sp-Abmessungen größer als Ihre beabsichtigten . Verwenden Sie stattdessen dp, da es nicht durch die Textgrößeneinstellung des Benutzers skaliert wird.

Hier ist ein Ausschnitt davon, wie jeder Button aussehen sollte:

    <ImageButton
        Android:id="@+id/button_topleft"
        Android:layout_width="0dp"
        Android:layout_height="match_parent"
        Android:layout_marginBottom="5dp"
        Android:layout_marginLeft="2dp"
        Android:layout_marginRight="5dp"
        Android:layout_marginTop="0dp"
        Android:layout_weight="1"
        Android:adjustViewBounds="true"
        Android:padding="20dp"
        Android:scaleType="fitCenter" />

Sample Button

321
Steven Byle

Ich verwende den folgenden Code in xml

Android:adjustViewBounds="true"
Android:scaleType="centerInside"
22
Pratibha Sarode

Versuchen Sie, Android:scaleType="fitXY" in i-Imagebutton xml zu verwenden 

8

Ich benutze Android:scaleType="fitCenter" mit Zufriedenheit.

5
Seraphim's

Finden Sie unter dem Link und versuchen Sie herauszufinden, was Sie wirklich wollen:

ImageView.ScaleType CENTER Zentriere das Bild in der Ansicht, führe jedoch .__ aus. keine Skalierung. 

ImageView.ScaleType CENTER_CROP Skalieren Sie das Bild einheitlich (behalten Sie das Bildverhältnis des Bildes bei ), So dass beide Abmessungen (Breite und Höhe) des Bildes ist gleich oder größer als das entsprechende Dimension der Ansicht (minus Auffüllen). 

ImageView.ScaleType CENTER_INSIDE Skalieren Sie das Bild einheitlich (beibehalten Sie ........................................ des Bildes ist gleich oder kleiner als die entsprechende Dimension der Ansicht (minus Auffüllen). 

ImageView.ScaleType FIT_CENTER Skalieren Sie das Bild mit CENTER. 

ImageView.ScaleType FIT_END Skaliert das Bild mit END. 

ImageView.ScaleType FIT_START Skalieren Sie das Bild mit START. 

ImageView.ScaleType FIT_XY Skalieren Sie das Bild mit FILL. 

ImageView.ScaleType MATRIX Skalieren Sie beim Zeichnen mit der Bildmatrix.

https://developer.Android.com/reference/Android/widget/ImageView.ScaleType.html

2
Nhat Dinh

Ich habe kürzlich zufällig herausgefunden, dass Sie, da Sie mehr Kontrolle über ImageView haben, einen Onclicklistener für ein Image festlegen können

private int id;
private bitmap bmp;
    LinearLayout.LayoutParams familyimagelayout = new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT );

    final ImageView familyimage = new ImageView(this);
            familyimage.setBackground(null);
            familyimage.setImageBitmap(bmp);
            familyimage.setScaleType(ImageView.ScaleType.FIT_START);
            familyimage.setAdjustViewBounds(true);
            familyimage.setId(id);
            familyimage.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //what you want to do put here
                }
            });
1
David

Sie können Ihr ImageButton-Widget so erstellen, wie ich es getan habe. In meinem Fall brauchte ich ein Widget mit einer festen Symbolgröße. Beginnen wir mit benutzerdefinierten Attributen:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="ImageButtonFixedIconSize">
        <attr name="imageButton_icon" format="reference" />
        <attr name="imageButton_iconWidth" format="dimension" />
        <attr name="imageButton_iconHeight" format="dimension" />
    </declare-styleable>
</resources>

Die Widget-Klasse ist recht einfach (der wichtigste Punkt ist das Auffüllen von Berechnungen in der onLayout -Methode):

class ImageButtonFixedIconSize
@JvmOverloads
constructor(
    context: Context,
    attrs: AttributeSet? = null,
    defStyleAttr: Int = Android.R.attr.imageButtonStyle
) : ImageButton(context, attrs, defStyleAttr) {

    private lateinit var icon: Drawable

    @Px
    private var iconWidth: Int = 0
    @Px
    private var iconHeight: Int = 0

    init {
        scaleType = ScaleType.FIT_XY
        attrs?.let { retrieveAttributes(it) }
    }

    /**
     *
     */
    override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
        val width = right - left
        val height = bottom - top

        val horizontalPadding = if(width > iconWidth) (width - iconWidth) / 2 else 0
        val verticalPadding = if(height > iconHeight) (height - iconHeight) / 2 else 0

        setPadding(horizontalPadding, verticalPadding, horizontalPadding, verticalPadding)

        setImageDrawable(icon)

        super.onLayout(changed, left, top, right, bottom)
    }

    /**
     *
     */
    private fun retrieveAttributes(attrs: AttributeSet) {
        val typedArray = context.obtainStyledAttributes(attrs, R.styleable.ImageButtonFixedIconSize)

        icon = typedArray.getDrawable(R.styleable.ImageButtonFixedIconSize_imageButton_icon)!!

        iconWidth = typedArray.getDimension(R.styleable.ImageButtonFixedIconSize_imageButton_iconWidth, 0f).toInt()
        iconHeight = typedArray.getDimension(R.styleable.ImageButtonFixedIconSize_imageButton_iconHeight, 0f).toInt()

        typedArray.recycle()
    }
}

Und zum Schluss solltest du dein Widget so benutzen:

<com.syleiman.gingermoney.ui.common.controls.ImageButtonFixedIconSize
    Android:layout_width="90dp"
    Android:layout_height="63dp"

    app:imageButton_icon="@drawable/ic_backspace"
    app:imageButton_iconWidth="20dp"
    app:imageButton_iconHeight="15dp"

    Android:id="@+id/backspaceButton"
    tools:ignore="ContentDescription"
    />
0
Alex Shevelev

In meinem Fall hat es gut funktioniert. Zunächst laden Sie ein Bild herunter und benennen es in ein Symbolbild um. Sie können die Größe ändern, indem Sie Android:layout_width oder Android:layout_height einstellen. Endlich haben wir

 <ImageButton
        Android:id="@+id/answercall"
        Android:layout_width="120dp"
        Android:layout_height="80dp"
        Android:src="@drawable/iconimage"
        Android:layout_alignParentBottom="true"
        Android:layout_alignParentLeft="true"
        Android:scaleType="fitCenter" />
0
Jame