У меня есть 6 ImageButton в моей деятельности, я устанавливаю изображения через мой код в них (не используя xml).
Я хочу, чтобы они занимали 75% площади кнопок. Но когда некоторые изображения занимают меньшую площадь, некоторые слишком велики, чтобы поместиться в кнопку imageButton. Как программно изменить размер и показать их? Ниже скриншот
ниже находится 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>
и фрагмент 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);
}
Ответы:
Используйте
android:padding="20dp"
(при необходимости измените отступы), чтобы контролировать, сколько изображения занимает кнопка.Используйте,
android:scaleType="fitCenter"
чтобы Android масштабировал изображения, иandroid:adjustViewBounds="true"
чтобы они корректировали свои границы из-за масштабирования.Все эти атрибуты могут быть установлены в коде на каждом
ImageButton
во время выполнения. Тем не менее, на мой взгляд, гораздо проще установить и просмотреть в xml.Кроме того, не используйте
sp
для чего-либо, кроме размера текста, оно масштабируется в зависимости от предпочтения размера текста, которое задает пользователь, поэтому вашиsp
размеры будут больше, чем предполагалось, если у пользователя есть «большой» параметр текста. Используйтеdp
вместо этого, поскольку он не масштабируется предпочтением размера текста пользователя.Вот фрагмент того, как должна выглядеть каждая кнопка:
источник
ImageButton
методыsetScaleType(ImageView.ScaleType.CENTER)
setAdjustViewBounds(true)
делают это программно.Я использую следующий код в
xml
источник
Попробуйте использовать
android:scaleType="fitXY"
в i-Imagebutton xmlисточник
Я пользуюсь
android:scaleType="fitCenter"
с удовлетворением.источник
Перейдите по ссылке ниже и попробуйте найти то, что вы действительно хотите:
https://developer.android.com/reference/android/widget/ImageView.ScaleType.html
источник
Недавно я случайно обнаружил, что, поскольку у вас больше контроля над ImageView, вы можете установить onclicklistener для изображения, это образец кнопки динамически создаваемого изображения
источник
Это хорошо сработало в моем случае. Сначала вы загружаете изображение и переименовываете его в iconimage, размещаете его в папке для рисования. Вы можете изменить размер, установив
android:layout_width
илиandroid:layout_height
. Наконец, у нас естьисточник
Вы можете сделать свой виджет ImageButton, как я. В моем случае мне нужен был виджет с фиксированным размером иконки. Давайте начнем с пользовательских атрибутов:
Класс виджета довольно прост (ключевой момент - это заполнение вычислений в методе onLayout ):
И, наконец, вы должны использовать свой виджет следующим образом:
источник