gpt4 book ai didi

android - 不同设备的自定义 View 大小

转载 作者:行者123 更新时间:2023-11-29 17:54:23 24 4
gpt4 key购买 nike

我通过扩展 View 类制作了自定义 View 。目前我有一个定义 View 大小的int。然后我重写 onMeasure 方法并使宽度和高度等于 int。

像这样:

private int DEFAULT_SIZE = 80;
public Paint mOuterCirclePaint = new Paint();

@Override
protected void onDraw(Canvas canvas) {

mOuterCirclePaint.setStyle(Style.STROKE);
mOuterCirclePaint.setStrokeWidth(5.0f);
mOuterCirclePaint.setDither(true);
mOuterCirclePaint.setAntiAlias(true);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

setMeasuredDimension(
DEFAULT_SIZE + 5
+ (int) mOuterCirclePaint.getStrokeWidth() / 2,
DEFAULT_SIZE + 5
+ (int) mOuterCirclePaint.getStrokeWidth() / 2);

}


public void setSize(int defaultSize) {
DEFAULT_SIZE = defaultSize;
invalidate();

但这意味着我的 View 在不同分辨率的不同设备上不能很好地扩展。在高分辨率设备上, View 看起来很小,但在低分辨率设备上, View 很大。

我不认为为每个分辨率创建一个新 View 是个好主意。我已经尝试通过将 DEFAULT_SIZE 乘以设备的密度来缩放 View (float scale = getResources().getDisplayMetrics().density;),但这并没有对低分辨率设备没有影响,但会使 View 在高分辨率设备上占据超过整个屏幕(您看不到)

那么为不同设备制作自定义 View 的最佳方式是什么?我是在正确的路线上还是有另一种方法?

最佳答案

您可以使用维度资源并使用

int defaultSize = (int)context.getResources().getDimension(R.dimen.default_size);

res/values/dimes.xml 中的自定义 View 的构造函数中:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="default_size">80dp</dimen>
</resources>

现在尺寸将根据设备屏幕的密度进行缩放。

这是测量 View 的简单示例:

public class MeasuredView extends View
{
private int m_defaultSize;

public MeasuredView(Context context)
{
super(context);

init(context);
}

public MeasuredView(Context context, AttributeSet attrs)
{
super(context, attrs);

init(context);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
setMeasuredDimension(m_defaultSize, m_defaultSize);
}

private void init(Context context)
{
m_defaultSize = (int)context.getResources().getDimension(R.dimen.default_value);
}
}

在 xhdpi 上大小为 160 像素,在 hdpi 上为 120,在 mdpi 上为 80。

你应该知道 setSize(int defaultSize) 将参数值作为像素,所以如果你想将它设置为 dp,你可以编写方法

public void setDefaultSizeDp(int defaultSizeDp)
{
int defaultSizePx = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, defaultSizeDp, getResources().getDisplayMetrics());

m_defaultSize = defaultSizePx;
invalidate();
}

关于android - 不同设备的自定义 View 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20526854/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com