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