需要将 ImageButton src 居中,而不是拉伸它以匹配按钮大小
Need to center ImageButton src, not stretch it to match the button size
我正在学习开发 Android 用户界面。我想创建一个带有一组可绘制对象的 ImageButton 来指示不同的按钮状态。我为每个按钮创建了两张图片:133 dp 用于正常状态,缩放副本 (126 dp) 用于创建按下按钮效果。
我画了第二张图,说明图像选择器机制至少起作用了。
这是我的应用程序的初始状态
当我按下按钮时,它只改变了颜色,但没有改变预期的大小。两个图像都适合相同的尺寸
Activity布局xml:
<?xml version="1.0" encoding="utf-8"?>
<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:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainUserActions"
android:background="@android:color/transparent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="3"
android:layout_alignParentTop="true">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:weightSum="2"
android:gravity="top">
<ImageButton
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageButton"
android:clickable="true"
android:layout_weight="1"
android:src="@drawable/broom_stick_image_selection"
android:background="@null"
android:layout_gravity="center"
android:scaleType="center" />
<ImageButton
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageButton2"
android:layout_gravity="center"
android:clickable="true"
android:layout_weight="1"
android:background="@null"
android:src="@drawable/vacuum_selection"
android:scaleType="center" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:layout_weight="1"></LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:layout_weight="1"></LinearLayout>
</LinearLayout>
</RelativeLayout>
可绘制选择 xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/broom_stick_white_pressed_rose" /> <!-- pressed -->
<item android:state_focused="true"
android:drawable="@drawable/broom_stick_white" /> <!-- focused -->
<item android:drawable="@drawable/broom_stick_white" /> <!-- default -->
</selector>
如何告诉系统只是将 src 图像放在按钮布局的中心,而不是让它们适合相同的大小?
实现此目的的一种方法是将项目包装在 layer-list
中,这样可以定义偏移量。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<layer-list>
<item
android:drawable="@drawable/broom_stick_white_pressed_rose"
android:top="2dp"
android:right="2dp"
android:bottom="2dp"
android:left="2dp" />
</layer-list>
</item>
<item android:drawable="@drawable/broom_stick_white" />
</selector>
我正在学习开发 Android 用户界面。我想创建一个带有一组可绘制对象的 ImageButton 来指示不同的按钮状态。我为每个按钮创建了两张图片:133 dp 用于正常状态,缩放副本 (126 dp) 用于创建按下按钮效果。
我画了第二张图,说明图像选择器机制至少起作用了。
这是我的应用程序的初始状态
当我按下按钮时,它只改变了颜色,但没有改变预期的大小。两个图像都适合相同的尺寸
Activity布局xml:
<?xml version="1.0" encoding="utf-8"?>
<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:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainUserActions"
android:background="@android:color/transparent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="3"
android:layout_alignParentTop="true">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:weightSum="2"
android:gravity="top">
<ImageButton
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageButton"
android:clickable="true"
android:layout_weight="1"
android:src="@drawable/broom_stick_image_selection"
android:background="@null"
android:layout_gravity="center"
android:scaleType="center" />
<ImageButton
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageButton2"
android:layout_gravity="center"
android:clickable="true"
android:layout_weight="1"
android:background="@null"
android:src="@drawable/vacuum_selection"
android:scaleType="center" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:layout_weight="1"></LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:layout_weight="1"></LinearLayout>
</LinearLayout>
</RelativeLayout>
可绘制选择 xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/broom_stick_white_pressed_rose" /> <!-- pressed -->
<item android:state_focused="true"
android:drawable="@drawable/broom_stick_white" /> <!-- focused -->
<item android:drawable="@drawable/broom_stick_white" /> <!-- default -->
</selector>
如何告诉系统只是将 src 图像放在按钮布局的中心,而不是让它们适合相同的大小?
实现此目的的一种方法是将项目包装在 layer-list
中,这样可以定义偏移量。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<layer-list>
<item
android:drawable="@drawable/broom_stick_white_pressed_rose"
android:top="2dp"
android:right="2dp"
android:bottom="2dp"
android:left="2dp" />
</layer-list>
</item>
<item android:drawable="@drawable/broom_stick_white" />
</selector>