我正在使用以下内容作为布局的背景:
<?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屏幕上看起来非常不同。有没有办法设置相对于屏幕的半径?
答案 0 :(得分:3)
一个很好的问题,我不知道用XML做一个简洁的方法(如果使用dip值不够),但是你可以用编程方式创建你的drawable并根据屏幕大小做一些数学来实现你想要的
// 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屏幕,这将是宽度*高度= 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&#34;屏幕这将是宽度*高度* 4 = 4096000除以500000圆角为您提供8px半径。在800x480 10&#34;屏幕这将是宽*高* 10 = 4096000除以500000圆角,这也为您提供8px半径。
我知道这是一个肮脏的黑客,你可能需要调整数学以使其完美地扩展,但我相信这是实现缩放半径的唯一方法。