【问题标题】:Android button size changes at different devices (width is set to dp)Android 按钮大小在不同设备上的变化(宽度设置为 dp)
【发布时间】:2016-02-11 01:09:53
【问题描述】:

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

我在原始设备中的用户界面:Galaxy S5

我在新设备中的用户界面:Nexus 5X

我在另一台设备中的用户界面:Galaxy Note4 (本次试用中,我设置左键使用sp代替dp)

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

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

--- 更新 --- 嗨,让我重新表述一下我的问题。

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

【问题讨论】:

  • 你的意思是你想让item的宽度,包含图像(上部)和文本(下部),总是等于屏幕的1/3宽度?
  • 是的,我认为这是在不同手机上展示我的应用程序的一种不错的方式,不是吗?这意味着无论人们使用什么手机,他们始终拥有相同的 UI 布局
  • 我认为还有另一种方法(使用重量)。我只是发布我的答案,希望能有所帮助!

标签: android android-layout android-studio screen-size android-screen-support


【解决方案1】:

以编程方式设置每个孩子的宽度,

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

屏幕尺寸如下

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

现在,如果您想设置 Text 而不是使用 SP

【讨论】:

  • 嗨,我认为这是最终的解决方案。谢谢!
【解决方案2】:

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

请查看链接:What is the difference between "px", "dp", "dip" and "sp" on Android?

【讨论】:

  • 嗨,我的目标是总是将按钮的宽度设置为屏幕宽度的 1/3。在这种情况下,我认为我应该使用 dp 或 sp (对吗?)。但事实证明,它的大小在设备上不一致(与设备屏幕大小的比例)
【解决方案3】:

我想这就是你想要的。

<?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)

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

【讨论】:

    猜你喜欢
    • 2012-06-16
    • 2015-03-10
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    • 2014-01-07
    • 2019-12-12
    相关资源
    最近更新 更多