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;
}
});
попробовать
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. Поскольку стили поддерживают фон, размер и многие другие свойства, которые помогают вам получить полный контроль над стилем в зависимости от проблемы.