Android 不同设备的按钮大小变化(宽度设置为 dp)

Android button size changes at different devices (width is set to dp)

我正在设计一个需要自定义按钮的应用程序。我通过继承 Android Button 来实现它,并在布局 xml 中将其宽度设置为 300dp。但是,我发现按钮的大小在不同的设备上发生了变化。以下是示例:

我的UI在原始设备中:Galaxy S5

我的UI在新设备中:Nexus 5X

我的UI在另一个设备中:Galaxy Note4 (本次试用,我设置左键使用sp而不是dp)

尽管它们都是 1080 x 1920 像素,但在我的新设备中整个布局比例似乎更小。

我也尝试使用 sp 但它的行为相同(问题)。我猜是风格?谁能给我更多的想法。谢谢!

---更新--- 嗨,让我改一下我的问题。

我正在寻找一种方法来制作一个按钮,其宽度固定为喜欢(相对)在任何设备上的 1/3 屏幕宽度。其文字也随之发生变化。我认为最终的方法是将所有内容都转换为像素并在程序中手动分配这些值。我曾经认为使用 dp 和 sp 是实现它的简单替代方法,但事实证明不是:(

如果您使用的是 dp,那么它会根据设备的屏幕密度而变化。为了在不同的屏幕密度条件下保持按钮大小相同,您需要使用 ptinmm 在你的按钮的宽度。

请检查 link : What is the difference between "px", "dp", "dip" and "sp" on Android?

要以编程方式设置每个 child 的宽度,

view.getLayoutParams().width = getScreenWidth() / VIEWS_COUNT_TO_DISPLAY;

屏幕尺寸如下

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics).widthPixels;

现在,如果您想设置文本,请使用 SP

我想这就是你想要的。

<?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="wrap_content"
    android:orientation="horizontal"
    android:gravity="center_horizontal"
    android:weightSum="3">

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_weight="1">

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scaleType="fitXY"
            android:src="@drawable/test"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="Normal Charge (Testing)"/>

     </LinearLayout>
</LinearLayout>

通过使用 weightSum 和 layout_weight,您可以将项目固定为屏幕宽度的 1/3。

在图像视图中,android:scaleType="fitXY"
这意味着图像将更改为大小以匹配 imageview 的大小。
如果您不需要该属性,可以删除该属性。

对于图片,最好的办法是在不同的文件夹中准备不同尺寸的图片:
对于 mdpi 它应该是 100X100
对于 ldpi 它应该是 75X75
对于 hdpi,它应该是 150X150(例如 Xperia U)
对于 xhdpi,它应该是 200X200(例如 Galaxy S3、Galaxy Note II、Xperia S)
对于 xxhdpi,它应该是 300X300(例如 Galaxy S4、Galaxy S5、Xperia Z、Xperia Z1、Xperia Z2)

上面的尺寸只是一个例子,你必须找到基本情况,如果你需要我可以解释更多。
希望能帮到你,谢谢!