ImageButton с различными состояниями размер изображений

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

Я пробовал adjustViewBounds без успеха.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="8dp" >

    <ImageButton
        android:id="@+id/picture_imagebutton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:src="@drawable/tab_background_selector" />

</RelativeLayout>

6 ответов


вместо ImageButton используйте ImageView, потому что ImageButton невозможно изменить размер на основе ImageSize. ImageView Лучший альтернативный способ, что я могу предложить для вашей проблемы. Достигнуть этого следующим образом:

макет.XML-код:

   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
       android:orientation="vertical"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent">

<ImageView
    android:id="@+id/image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/image_selection"/>

 </RelativeLayout>

image_selection.XML-код:

<selector xmlns:android="http://schemas.android.com/apk/res/android">    
   <item android:state_focused="true" 
       android:state_pressed="true" 
       android:drawable="@drawable/default_image"/> //default_image.png is displayed when the Activity loads.   
   <item android:state_focused="false" 
       android:state_pressed="true" 
       android:drawable="@drawable/default_image_hover" />  //default_image_hover.png is an image displaed during Onclick of ImageView  
   <item android:state_focused="true"
       android:drawable="@drawable/default_image_hover" />   
   <item android:state_focused="false" 
       android:drawable="@drawable/default_image"/>
 </selector>

SampleActivity.java:

  ImageView myImage= (ImageView)findViewById(R.id.image);
    myImage.setOnClickListener(this);

Как вы, возможно, уже знаете, нет простого способа установить drawables в селекторе, и я не думаю, что есть решение на основе XML для вашей проблемы. Попробовать это.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <ImageButton 
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/default_image"
        android:contentDescription="@null"/>

</RelativeLayout>

затем вам нужно добавить этот код в onCreate или onResume

    final ImageButton button = (ImageButton) findViewById(R.id.button);

    button.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if(event.getAction() == MotionEvent.ACTION_DOWN)
                button.setImageDrawable(getResources().getDrawable(getResources().getIdentifier("pressed_image", "drawable", getPackageName())));
            else if(event.getAction() == MotionEvent.ACTION_UP)
                button.setImageDrawable(getResources().getDrawable(getResources().getIdentifier("default_image", "drawable", getPackageName())));

            return false;
        }
    });

Не используйте ImageButton, просто используйте изображение и поставьте его с помощью метода onClick


попробовать

android:background="@drawable/tab_background_selector" 

insted

android:src="@drawable/tab_background_selector"

надеюсь, что это поможет.


как уже упоминалось, вам лучше всего использовать ImageView как он будет регулировать его высоту. Установите свойство setClickable использовать его как кнопку. Также поменяйте свой RelativeLayout на LinearLayout, это обернет свою высоту к вашему ImageButton:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="8dp" >

<ImageView
    android:id="@+id/picture_imagebutton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:adjustViewBounds="true"
    android:setClickable="true"
    android:src="@drawable/tab_background_selector" />

</LinearLayout>

можно сделать LinearLayout clickable и добавить фоновый ресурс (прозрачный, когда не нажата, цветной при нажатии), чтобы действовать в качестве селектора.


вы можете использовать стили и устанавливать разные стили на основе состояния ImageBUtton. Поскольку стили поддерживают фон, размер и многие другие свойства, которые помогают вам получить полный контроль над стилем в зависимости от проблемы.