繁体   English   中英

Android按钮大小在不同设备上更改(宽度设置为dp)

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

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

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

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

我在其他设备上的用户界面: Galaxy Note4 (在本次试用中,我将左侧按钮设置为使用sp而不是dp)

看来我的新设备的整体布局比例都较小,即使它们都是1080 x 1920像素。

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

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

我正在寻找一种方法来制作宽度固定为(相对) 任何设备上1/3屏幕宽度的按钮。 并且其文本也相应地更改。 我认为最终的方法是将所有内容转换为像素,并在程序中手动分配这些值。 我曾经认为使用dp和sp是实现此目的的简便方法,但事实并非如此:(

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

请检查链接: Android上的“ px”,“ dp”,“ dip”和“ sp”有什么区别?

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

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宽度。

在imageview内部,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)

上面的大小仅是示例,您必须找到基本情况,如果需要,我可以详细说明。
希望对您有所帮助,谢谢!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM