繁体   English   中英

Android布局-设置相对于屏幕尺寸的圆角半径

[英]Android layout - set rounded corner radius relative to screen size

我将以下内容用作布局的背景:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FFFFFF" />
    <corners android:radius="20dip"/>
    <padding android:left="0dip" android:top="0dip" android:right="0dip" android:bottom="0dip" />
</shape>

但在4“ 800x480屏幕上的圆角效果与在4.7” 1280x720屏幕上的圆角效果非常不同。 有什么方法可以设置相对于屏幕的半径?

一个好问题,我不知道一种使用XML的巧妙方法(如果使用dip值不够的话),但是您可以以编程方式创建可绘制对象,并根据屏幕尺寸进行一些数学运算以实现所需的结果。

// Create a drawable
GradientDrawable shape = new GradientDrawable();
// Get the screen size
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
// Do some math to get the radius value to scale
int radius = (int) Math.round(width * height / 100000);
// Set the corner radius
shape.setCornerRadius(radius);
// Apply shape as background
setBackground(shape);

因此,对于1280x800的屏幕,宽度x高度= 1024000除以100000舍入后得出的半径为10px。 但是,在800x480屏幕上,半径将为4px。 但是,这没有考虑屏幕的物理尺寸,因此,如果出现问题,您可以获取以英寸为单位的物理尺寸:

DisplayMetrics dm = new DisplayMetrics();
display.getMetrics(dm);
double x = Math.pow(dm.widthPixels/dm.xdpi,2);
double y = Math.pow(dm.heightPixels/dm.ydpi,2);
double inches = Math.sqrt(x+y);

然后,您也可以将此值作为因子,例如:

int radius = (int) Math.round(width * height * inches / 500000);

因此,现在对于1280x800 4“屏幕,这将是宽度*高度* 4 = 4096000除以500000舍入后得到的半径为8px。在800x480 10”屏幕上,这将是宽度*高度* 10 = 4096000除以500000舍入后的值给你一个8px的半径。

我知道这是一个肮脏的技巧,您可能需要调整数学以使其完美缩放,但是我相信这是可以实现缩放半径的唯一方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM