Настройка размера ImageButton в Android

Есть ли способ сделать это? Я попытался заполнить изображение и установить ширину/высоту представления, но, похоже, не работает. Вот пример:

<ImageButton
    android:id="@+id/search"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/search_small"
    android:paddingTop="4sp"
    android:paddingBottom="4sp"
    android:paddingLeft="6sp"
    android:paddingRight="6sp"
    android:layout_marginRight="10sp"
    android:layout_marginTop="6sp"
    android:layout_marginBottom="6sp"
    android:layout_alignParentRight="true"
/>

Я хочу, чтобы кнопка была шире, чем высокая, но она выходит наоборот.

Ответ 1

Просто была игра, чтобы попытаться понять вашу проблему.

Кажется, что ImageButton представляет собой составное представление, которое имеет несколько предварительно заданных значений. Например, какой-то марж, который вы не можете переопределить с помощью XML. Если вы не можете изменить свое изображение в соответствии с тем, что хотите, тогда вам лучше создать свой собственный составной вид.

Вот мой пример составного представления, которое вы можете сделать сами:

    <FrameLayout                                        android:layout_width="wrap_content" android:layout_height="wrap_content">           
        <Button     android:id="@+id/saveSearchButton"  android:layout_width="50dp"         android:layout_height="50dp" />
        <ImageView                                      android:layout_width="45dp"         android:layout_height="45dp" android:scaleType="fitXY" android:src="@drawable/ic_menu_save" android:layout_gravity="center"/>
    </FrameLayout>
    <FrameLayout                                        android:layout_width="wrap_content" android:layout_height="wrap_content">           
        <Button     android:id="@+id/clearSearchButton" android:layout_width="50dp"         android:layout_height="50dp" />
        <ImageView                                      android:layout_width="45dp"         android:layout_height="45dp" android:scaleType="fitXY" android:src="@drawable/ic_menu_close_clear_cancel" android:layout_gravity="center"/>
    </FrameLayout>      

И исходные кнопки:

    <ImageButton android:id="@+id/imageButton1" android:src="@drawable/ic_menu_save"                android:layout_height="45dp" android:layout_width="45dp"/>
    <ImageButton android:id="@+id/imageButton2" android:src="@drawable/ic_menu_close_clear_cancel"  android:layout_height="45dp" android:layout_width="45dp"/>  

Здесь мы можем увидеть пользовательский композит image/button, а затем построить в ImageButton как часть SDK:

Example

Ответ 2

Установите android:background вместо android:src, чтобы установить изображение на кнопке. Это позволит настроить изображение на размер вашей кнопки. Затем отрегулируйте дополнение после.

Ответ 3

Вы не должны использовать sp как размерный размер - следует использовать dp, так как это поможет вашему масштабу просмотра напрямую с различной плотностью экрана и разрешением. См. здесь для измерений.

padding будет вытеснять другие элементы из вашей границы. margin будет вытолкнуть содержимое вашего представления внутрь от вашей границы (т.е. вытряхнет доступное пространство для вашего изображения). Граница определяется по высоте и ширине. Без дополнительной информации я бы предположил, что вас путают по полям - удалите их и поэкспериментируйте.

Также полезно для вас: android:scaleType="fitXY" делает растягивание изображения подходящим для него размерам X и Y. Это поможет вам увидеть холст, доступный для вашего изображения. Как только вы почувствуете, что область достаточно велика для правильного масштабирования изображения, измените масштаб на центр Inside. Смотрите здесь для всех типов шкалы.

Ответ 4

Я использую атрибуты minWidth и minHeight в сочетании с типом шкалы fitXY и обертыванием его содержимого для модуляции формы моей кнопки.

Вы хотите сделать свою кнопку "шире", например, распечатав кнопку 200X100 из квадратного значка, вы можете сделать это так:

<ImageButton
        android:id="@+id/fooButton"
        android:src="@drawable/play_button"
        android:backgroundTint="#00000000"
        android:minWidth="200"
        android:minHeight="100"
        android:scaleType="fitXY"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="playStuff"
        />

введите описание изображения здесь

Ответ 5

Можете ли вы объяснить свой вопрос более широко, чтобы мы могли более понять.

В соответствии с моим пониманием Вы хотите установить свою высоту/ширину ImageButton. Но это не работает. Я хочу спросить вас, что, если вы пишете какую-либо конкретную высоту/ширину, то и она не работает?

Я скопировал ваш код в своих файлах, и я изменил высоту/ширину вручную, тогда он будет работать.

Пожалуйста, объясните свой вопрос.

Спасибо.

Ответ 6

Я закончил макет после ответа Грэма. Четыре "imageButton" фиксируют снизу, такую ​​же ширину, изменяемый размер изображения. спасибо!

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:background="@color/#000"
        android:weightSum="100" >

        <FrameLayout 
            android:id="@+id/flBottom1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="25"
            >
            <Button 
                android:id="@+id/ibBottom1" 
                android:layout_width="fill_parent"
                android:layout_height="fill_parent" 
                android:background="@drawable/detail_tab_bg_selector"/>
            <ImageView 
                android:layout_width="32dp"
                android:layout_height="32dp"
                android:scaleType="fitXY" 
                android:src="@drawable/icon_home_48_48" 
                android:layout_gravity="center_horizontal"
                android:layout_marginTop="5dp"
                />
            <TextView
                android:id="@+id/tvBottom1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:layout_gravity="center_horizontal"
                android:layout_marginTop="35dp"
                android:text="@string/bailty_text_home"
                style="@style/bailtyTextBottom"
                />
        </FrameLayout>


        <FrameLayout 
            android:id="@+id/flBottom2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="25"
            >
            <Button 
                android:id="@+id/ibBottom2" 
                android:layout_width="fill_parent"
                android:layout_height="fill_parent" 
                android:background="@drawable/detail_tab_bg_selector"/>
            <ImageView 
                android:layout_width="32dp"
                android:layout_height="32dp"
                android:scaleType="fitXY" 
                android:src="@drawable/icon_compose_48_48" 
                android:layout_gravity="center_horizontal"
                />
            <TextView
                android:id="@+id/tvBottom2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:layout_gravity="center_horizontal"
                android:layout_marginTop="35dp"
                android:text="@string/bailty_text_comment"
                style="@style/bailtyTextBottom"
                />
        </FrameLayout>


        <FrameLayout 
            android:id="@+id/flBottom3"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="25"
            >
            <Button 
                android:id="@+id/ibBottom3" 
                android:layout_width="fill_parent"
                android:layout_height="fill_parent" 
                android:background="@drawable/detail_tab_bg_selector"/>
            <ImageView 
                android:layout_width="32dp"
                android:layout_height="32dp"
                android:scaleType="fitXY" 
                android:src="@drawable/icon_search_48_48" 
                android:layout_gravity="center_horizontal"
                />
            <TextView
                android:id="@+id/tvBottom3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:layout_gravity="center_horizontal"
                android:layout_marginTop="35dp"
                android:text="@string/bailty_text_search"
                style="@style/bailtyTextBottom"
                />
        </FrameLayout>


        <FrameLayout 
            android:id="@+id/flBottom4"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="25"
            >
            <Button 
                android:id="@+id/ibBottom4" 
                android:layout_width="fill_parent"
                android:layout_height="fill_parent" 
                android:background="@drawable/detail_tab_bg_selector"/>
            <ImageView 
                android:layout_width="32dp"
                android:layout_height="32dp"
                android:scaleType="fitXY" 
                android:src="@drawable/icon_barcode_48_48" 
                android:layout_gravity="center_horizontal"
                />
            <TextView
                android:id="@+id/tvBottom4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:layout_gravity="center_horizontal"
                android:layout_marginTop="35dp"
                android:text="@string/bailty_text_scan_again"
                style="@style/bailtyTextBottom"
                />
        </FrameLayout>
    </LinearLayout>