W swojej działalności mam 6 ImageButton, ustawiam w nich obrazy poprzez mój kod (nie używając XML).
Chcę, aby obejmowały 75% obszaru przycisku. Ale jeśli niektóre obrazy zajmują mniejszy obszar, niektóre są zbyt duże, aby zmieścić się w imageButton. Jak programowo zmienić rozmiar i wyświetlić je? Poniżej znajduje się zrzut ekranu
poniżej znajduje się plik xml
<?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>
i fragment myClass.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);
}
Odpowiedzi:
Użyj
android:padding="20dp"
(dostosuj wypełnienie w razie potrzeby), aby kontrolować, ile obrazu zajmuje na przycisku.Użyj a,
android:scaleType="fitCenter"
aby system Android skalował obrazy iandroid:adjustViewBounds="true"
dostosował ich granice ze względu na skalowanie.Wszystkie te atrybuty można ustawić w kodzie każdego z nich
ImageButton
w czasie wykonywania. Jednak moim zdaniem znacznie łatwiej jest ustawić i wyświetlić podgląd w xml.Ponadto, nie należy używać
sp
do innych celów niż rozmiar tekstu, jest skalowana w zależności od preferencji rozmiar tekstu zestawy użytkownika, dzięki czemusp
wymiary będą większe niż zamierzone, jeśli użytkownik ma „duże” ustawienie tekstu. Użyjdp
zamiast tego, ponieważ nie jest skalowany według preferencji rozmiaru tekstu użytkownika.Oto fragment tego, jak powinien wyglądać każdy przycisk:
źródło
ImageButton
metodysetScaleType(ImageView.ScaleType.CENTER)
setAdjustViewBounds(true)
robią to programowo.Używam następującego kodu w
xml
źródło
Spróbuj użyć
android:scaleType="fitXY"
w i-Imagebutton xmlźródło
Korzystam
android:scaleType="fitCenter"
z satysfakcją.źródło
Sprawdź poniższy link i spróbuj znaleźć to, czego naprawdę chcesz:
https://developer.android.com/reference/android/widget/ImageView.ScaleType.html
źródło
Niedawno dowiedziałem się przypadkiem, że skoro masz większą kontrolę nad ImageView, możesz ustawić onclicklistener dla obrazu, tutaj jest próbka dynamicznie utworzonego przycisku obrazu
źródło
W moim przypadku zadziałało dobrze. Najpierw pobierz obraz i zmień jego nazwę na iconimage, zlokalizuje go w folderze do rysowania. Możesz zmienić rozmiar, ustawiając
android:layout_width
lubandroid:layout_height
. Wreszcie mamyźródło
Możesz zrobić swój widget ImageButton tak jak ja. W moim przypadku potrzebowałem widżetu o stałym rozmiarze ikon. Zacznijmy od atrybutów niestandardowych:
Klasa widżetu jest dość prosta (kluczową kwestią jest wypełnienie obliczeń w metodzie onLayout ):
Na koniec powinieneś użyć swojego widżetu w następujący sposób:
źródło