0

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

在模拟器中:

在此处输入图像描述

在设备中: 在此处输入图像描述

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

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

4

2 回答 2

1

问题是您正在使用这些:

updt_btn_params.width=80;
updt_btn_params.height=45;

有了这个,你就可以设置像素的宽度和高度,这是你不应该做的事情。不同的设备具有不同的像素密度,这意味着像素的大小因设备而异。Nexus 5 具有相当高的像素密度,这使得您的按钮非常小。



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

1.在资源中定义dimen.xml中的值

在您的资源中有一个文件夹“values”应该包含一个dimen.xml。在此您可以像这样定义按钮的尺寸:

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

然后您可以通过以下方式将它们读入您的代码:

updt_btn_params.width = getResources().getDimensionPixelSize(R.dimen.width);
updt_btn_params.height = getResources().getDimensionPixelSize(R.dimen.height);

2.使用XML

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

在那里,您可以像这样在“dp”中定义宽度和高度:

layout_width="80dp"
layout_height="45dp"

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

于 2014-11-27T09:19:18.183 回答
0
float ht_px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, ht, getResources().getDisplayMetrics());
float wt_px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, wt, getResources()
于 2014-11-27T09:28:02.103 回答