我正在设计一个需要自定义按钮的应用。我通过继承Android Button来实现它,并在布局xml中将其宽度设置为300dp。但是,我发现按钮的大小在不同的设备上发生了变化。以下是示例:
原始设备中的我的用户界面:Galaxy S5
新设备中的我的用户界面:Nexus 5X
其他设备中的我的用户界面:Galaxy Note4 (在此试验中,我将左按钮设置为使用sp而不是dp)
似乎整个布局比例在我的新设备中更小,即使它们都是1080 x 1920像素。
我也尝试使用sp但它的行为相同(问题)。我的猜测是风格?任何人都可以给我更多的想法。谢谢!
---更新--- 嗨,让我重新解释一下我的问题。
我正在寻找一种方法来制作一个按钮,其宽度固定为(相对) 1/3屏幕宽度在任何设备。它的文本也相应地改变了。我认为最终的方法是将所有内容转换为像素并在程序中手动分配这些值。我曾经认为使用dp和sp是实现它的一个简单的替代方案,但事实并非如此:(
答案 0 :(得分:0)
如果您使用的是 dp ,则会根据设备的屏幕密度进行更改。为了在不同的屏幕密度条件下保持按钮大小相同,您需要在按钮中使用 pt , 或 mm 宽度。
请检查链接:What is the difference between "px", "dp", "dip" and "sp" on Android?
答案 1 :(得分:0)
设置每个子程序的宽度,
view.getLayoutParams().width = getScreenWidth() / VIEWS_COUNT_TO_DISPLAY;
屏幕大小如下
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics).widthPixels;
现在,如果你想设置Text而不是使用 SP 。
答案 2 :(得分:0)
我认为这就是你想要的。
<?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 =&#34; fitXY&#34;
这意味着图像将更改为大小以匹配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)
上面的大小只是一个例子,你必须找到基本情况,如果你需要,我可以解释更多
跳,这可以帮助,谢谢!