我发现Android选择基于屏幕密度的按钮的图像资源是无益的。
我正在为孩子们开发一个应用程序,所以我希望它有很好的明显按钮,但同时我必须将自己限制在可用的屏幕空间。
基本上我想使用适合我所拥有的屏幕尺寸的图像尺寸,而不是它的密度。
例如,假设我想在横向模式下在屏幕侧面放置5个按钮。我想做这样的事情......
类似的东西。
Android有一个很好的方法吗,或者我必须自己编码吗?如何访问适当的图像? (我的大多数按钮使用两个图像 - 向上和向下)
由于
编辑:
在我的问题中,我似乎并不清楚。我不需要知道如何布置按钮,我很清楚Android如何根据密度选择图像 - 这就是问题所在。
考虑这两个设备 -
1 / Galaxy I9000手机 - 屏幕尺寸4“HDPI
2 / Samsung Tab 3平板电脑 - 屏幕尺寸7“HDPI
由于两者都具有相同的屏幕密度,因此两者都将以相同的物理尺寸显示图像。一个1“方形的图标在另一个上将是1”方形。那就是问题所在。我希望按钮与屏幕尺寸成比例。
我可以尝试使用特定于大小的资源(例如drawable-small),但是在不同密度的小型设备之间会出现问题,这意味着要创建更多的目录,这看起来像一个坏主意。
我倾向于在no-dpi目录中放置各种尺寸,然后根据需要加载。
答案 0 :(得分:0)
你可以问你按钮的位置
int hButton = imageButton.getHeight()
然后你可以用同样的方式获得按钮的高度,这样一些简单的学校数学:
getHeight()/buttonCount+(buttonCount*padding)
加载您拥有的最大图像并根据您的需要进行缩放,因为您不知道它有多大,除非您自己绘制它。我的意思是你可以构建像utils类这样的东西,它包含一个带有imageNames的地图,它们的大小是px
答案 1 :(得分:0)
Android中的布局XML非常灵活且功能强大。您可以动态布局按钮,如下所示。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_margin="10dp"
android:layout_weight="1"
android:text="Button A"/>
<Button
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_margin="10dp"
android:layout_weight="1"
android:text="Button A"/>
<Button
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_margin="10dp"
android:layout_weight="1"
android:text="Button A"/>
<Button
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_margin="10dp"
android:layout_weight="1"
android:text="Button A"/>
</LinearLayout>
对于图像资源,如果您认为标准的Android图像资源选择没有帮助,我相信您会误解某些内容。这与按钮的大小无关。这是关于图像的密度。
如果您正在考虑使用简单形状作为按钮,您可能想了解ShapeDrawables。
答案 2 :(得分:-1)
获取屏幕运行时高度和宽度
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
按钮高度
int buttonHeight = hButton.getHeight():
然后获得最小的按钮高度 计算图像高度并将其设置为图像资源。 如果你要求图像大小调整代码 然后去这里。
Bitmap yourBitmap;
Bitmap resized = Bitmap.createScaledBitmap(yourBitmap, newWidth, newHeight, true);