ImageButton具有不同的状态图像大小

我怎样才能防止ImageButton具有固定的大小? 在select器中使用的drawable具有不同的大小,我希望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自己调整ImageSizeImageView是我可以为您的问题build议的最佳替代方法。 通过以下方式获得成就:

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

正如你可能已经知道在select器中设置drawable并不是一个简单的方法,我不认为有一个基于XML的解决scheme来解决你的问题。 尝试这个。

 <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使用它像一个button。 另外交换你的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可点击并添加背景资源(未点击时为透明,点击时为彩色)充当select器。

您可以使用样式并根据ImageBUtton的状态设置不同的样式。 由于样式支持背景,大小和许多其他属性,可帮助您完全控制样式,具体取决于手头的问题。