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
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);
}
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" />
Ich verwende den folgenden Code in xml
Android:adjustViewBounds="true"
Android:scaleType="centerInside"
Versuchen Sie, Android:scaleType="fitXY"
in i-Imagebutton xml zu verwenden
Ich benutze Android:scaleType="fitCenter"
mit Zufriedenheit.
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
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
}
});
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"
/>
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" />