【发布时间】:2016-09-15 17:45:07
【问题描述】:
我有一个尺寸为width=216 和height=110 的按钮,设备屏幕分辨率为1080 x 1920。当我更改为其他设备(较小的分辨率)时,按钮太大了。因此,我需要编写一个函数来根据屏幕的设备分辨率动态更改按钮大小。首先,我将检查目标设备分辨率,然后根据当前设备进行更改。但是,按钮分辨率不正确。我该如何解决?这是我的代码
我的代码在 1080x1920
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="center"
>
<Button
android:id="@+id/btn"
android:layout_width="216dp"
android:layout_height="110dp"
android:layout_gravity="center"
android:scaleType="fitCenter"
/>
</LinearLayout>
改为动态方式:
public int WIDTH ;
public int HEIGHT ;
//Get screen resolution
DisplayMetrics metrics = getResources().getDisplayMetrics();
HEIGHT = metrics.heightPixels;
WIDTH= metrics.widthPixels;
int height_px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 110, getResources().getDisplayMetrics());
int weight_px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 216, getResources().getDisplayMetrics());
int width_linearlayout = Math.round((float)weight_px/1080*WIDTH);
int height_linearlayout = Math.round((float)height_px/1920*HEIGHT);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(width_linearlayout,height_linearlayout);
btn.setLayoutParams(layoutParams);
【问题讨论】:
-
你读过Supporting Multiple Layouts吗?如果没有,我建议你继续看看。
-
@Abbas:它来自 xml 和 drawable 文件夹。我想用编程改变我的按钮
-
那么你将不得不做很多价值很少的工作。我建议你通过布局来做到这一点。检查@slackwars 答案,这是实现您想要的最佳方式。但是,该解决方案仅在您具有相似布局时才有效。对于不同尺寸的不同布局,您必须添加多个布局。
-
因为按钮的大小必须根据参考仔细选择一次。因此,我需要使用代码/编程来做到这一点,而不是 xml 文件
-
1) 你为什么写例如
HEIGHT = metrics.widthPixels;? 2) 你能解释/添加一张你想要什么与你目前得到什么的图片吗? 3)如果我们让其他一切正常工作:由于 Button 不是方形的,这可能看起来不错,只是在横向上变得一团糟。
标签: android android-layout android-widget android-linearlayout