我的活动中有 6 个 ImageButton,我通过其中的代码设置图像(不使用 xml)。
我希望它们覆盖 75% 的按钮区域。但是由于有些图像覆盖的区域较小,有些图像太大而无法放入 imageButton。如何以编程方式调整大小并显示它们?下面是屏幕截图
下面是xml文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:layout_marginBottom="5sp" android:layout_marginLeft="2sp" android:layout_marginRight="5sp" android:layout_marginTop="0sp" > <LinearLayout android:layout_height="0dp" android:layout_width="match_parent" android:layout_weight="1" android:orientation="horizontal"> <ImageButton android:layout_height="match_parent" android:layout_width="0dp" android:layout_weight="1" android:id="@+id/button_topleft" android:layout_marginBottom="5sp" android:layout_marginLeft="2sp" android:layout_marginRight="5sp" android:layout_marginTop="0sp" /> <ImageButton android:layout_height="match_parent" android:layout_width="0dp" android:layout_weight="1" android:id="@+id/button_topright" android:layout_marginBottom="5sp" android:layout_marginLeft="2sp" android:layout_marginRight="5sp" android:layout_marginTop="0sp" /> </LinearLayout> <LinearLayout android:layout_height="0dp" android:layout_width="match_parent" android:layout_weight="1" android:orientation="horizontal"> <ImageButton android:layout_height="match_parent" android:layout_width="0dp" android:layout_weight="1" android:id="@+id/button_repeat" android:layout_marginBottom="5sp" android:layout_marginLeft="2sp" android:layout_marginRight="5sp" android:layout_marginTop="0sp" /> <ImageButton android:layout_height="match_parent" android:layout_width="0dp" android:layout_weight="1" android:id="@+id/button_next" android:layout_marginBottom="5sp" android:layout_marginLeft="2sp" android:layout_marginRight="5sp" android:layout_marginTop="0sp" /> </LinearLayout> <LinearLayout android:layout_height="0dp" android:layout_width="match_parent" android:layout_weight="1" android:orientation="horizontal"> <ImageButton android:layout_height="match_parent" android:layout_width="0dp" android:layout_weight="1" android:id="@+id/button_bottomleft" android:layout_marginBottom="5sp" android:layout_marginLeft="2sp" android:layout_marginRight="5sp" android:layout_marginTop="0sp" /> <ImageButton android:layout_height="match_parent" android:layout_width="0dp" android:layout_weight="1" android:id="@+id/button_bottomright" android:layout_marginBottom="5sp" android:layout_marginLeft="2sp" android:layout_marginRight="5sp" android:layout_marginTop="0sp" /> </LinearLayout> </LinearLayout>
和 myClass.java 的片段:
public void addImageButtons() { iB_topleft = (ImageButton) findViewById(R.id.button_topleft); iB_topright = (ImageButton) findViewById(R.id.button_topright); iB_bottomleft = (ImageButton) findViewById(R.id.button_bottomleft); iB_bottomright = (ImageButton) findViewById(R.id.button_bottomright); iB_next = (ImageButton) findViewById(R.id.button_next); iB_repeat = (ImageButton) findViewById(R.id.button_repeat); } public void setImageNextAndRepeat() { iB_topleft .setImageResource(R.drawable.aa); iB_topright.setImageResource(R.drawable.bb); iB_bottomleft.setImageResource(R.drawable.cc); iB_bottomright.setImageResource(R.drawable.dd); iB_next.setImageResource(R.drawable.next); iB_repeat.setImageResource(R.drawable.repeat); }
我希望它们覆盖 75% 的按钮区域。
使用android:padding="20dp"(根据需要调整填充)来控制图像在按钮上的占用量。
android:padding="20dp"
但是由于有些图像覆盖的区域较小,有些图像太大而无法放入 imageButton。如何以编程方式调整大小并显示它们?
使用 aandroid:scaleType="fitCenter"让 Android 缩放图像,并android:adjustViewBounds="true"让它们因缩放而调整其边界。
android:scaleType="fitCenter"
android:adjustViewBounds="true"
所有这些属性都可以在每个ImageButton运行时的代码中设置。但是,在我看来,在 xml 中设置和预览要容易得多。
ImageButton
此外, 请勿 用于sp文本大小以外的任何内容,它会根据用户设置的文本大小偏好进行缩放,因此sp如果用户具有“大”文本设置,您的尺寸将大于您的预期。改为使用dp,因为它不按用户的文本大小偏好进行缩放。
sp
dp
以下是每个按钮的外观片段:
<ImageButton android:id="@+id/button_topleft" android:layout_width="0dp" android:layout_height="match_parent" android:layout_marginBottom="5dp" android:layout_marginLeft="2dp" android:layout_marginRight="5dp" android:layout_marginTop="0dp" android:layout_weight="1" android:adjustViewBounds="true" android:padding="20dp" android:scaleType="fitCenter" />