我正在为特定屏幕动态创建一个按钮。它在模拟器中清晰可见,在Device(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
答案 0 :(得分: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”才能使每个设备上的按钮看起来完全相同。
答案 1 :(得分:0)
float ht_px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, ht, getResources().getDisplayMetrics());
float wt_px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, wt, getResources()