Android按钮在Nexus5中变小

Android按钮在Nexus5中变小,android,android-button,nexus-5,Android,Android Button,Nexus 5,我正在为特定屏幕动态创建一个按钮。它在Emulator中清晰可见,在设备(Nexus5)中看起来非常小 在模拟器中: 在设备中: 我在代码中使用以下代码创建按钮: LayoutParams updt_btn_params = new LayoutParams(); update_data = new Button(this); update_data.setText("Update"); update_data.setTextSize(9); updt_btn_params.width=80

我正在为特定屏幕动态创建一个按钮。它在Emulator中清晰可见,在设备(Nexus5)中看起来非常小

在模拟器中:

在设备中:

我在代码中使用以下代码创建按钮:

LayoutParams updt_btn_params = new LayoutParams();
update_data = new Button(this);
update_data.setText("Update");
update_data.setTextSize(9);
updt_btn_params.width=80;
updt_btn_params.height=45;
updt_btn_params.gravity=Gravity.CENTER_HORIZONTAL;
update_data.setOnClickListener(update_listnr);
update_data.setLayoutParams(updt_btn_params);

我还需要做些什么才能在设备中清晰地显示按钮。TIA

问题在于您正在使用这些:

updt_btn_params.width=80;
updt_btn_params.height=45;
这样,您就可以设置宽度和高度(以像素为单位),这是您永远不应该做的事情。不同的设备具有不同的像素密度,这意味着像素的大小因设备而异。Nexus5具有相当高的像素密度,这使得您的按钮非常小



现在有两种方法可以解决这个问题:

1。在参考资料中定义dimen.xml中的值

在您的资源中有一个文件夹“values”,它应该包含dimen.xml。在这种情况下,您可以定义按钮的尺寸,如下所示:

<dimen name="width">80dp</dimen>
<dimen name="height">45dp</dimen>
layout_width="80dp"
layout_height="45dp"
2。使用XML

但是如果您可以在XML文件中定义活动的整个布局

在这里,您可以在“dp”中定义宽度和高度,如下所示:

<dimen name="width">80dp</dimen>
<dimen name="height">45dp</dimen>
layout_width="80dp"
layout_height="45dp"

必须使用“dp”而不是“px”,以使每个设备上的按钮看起来完全相同。

请注意,您在代码中使用的是像素,而不是使用dp(sp表示字体)。因此,它们没有正确缩放。是否需要使用like updt_btn_参数。宽度=80dp;如果我错了,请纠正我。@kavuru,是的,我想这就是Der Golem想说的,并对文本大小使用9sp。最好的方法是对ListView项使用单独的布局文件。在这里,您可以定义dp、sp。。。作为替代方案,您必须找到设备的比例因子,并将您的值乘以该比例因子(参见px到dp的转换)。它还可能有助于将您的单元类型声明为复杂单元DIP和复杂单元SP ok。因此,如果我们在SP&dp中使用in布局定义,那么它是否会根据设备自动缩放。
float ht_px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, ht, getResources().getDisplayMetrics());
float wt_px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, wt, getResources()