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

Как я могу запретить 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> 

Solutions Collecting From Web of "ImageButton с различными размерами изображений состояний"

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

layout.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); 

Как вы, возможно, уже знаете, что нет простого способа установить чертежи в селекторе, и я не думаю, что на вашей проблеме есть решение на основе 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, просто используйте Image, поставьте его с помощью метода onClick

Пытаться

 android:background="@drawable/tab_background_selector" 

Внедрен

 android:src="@drawable/tab_background_selector" 

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

Как уже упоминалось выше, вам лучше всего использовать ImageView как он будет регулировать его высоту. Установите свойство setClickable чтобы использовать его как кнопку. Также LinearLayout RelativeLayout для LinearLayout , это приведет к ImageButton его высоты до вашего 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 и добавить фоновый ресурс (прозрачный, если не щелкнуть, покрасить при нажатии), чтобы действовать как селектор.

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