当前位置: 首页 > 知识库问答 >
问题:

为不同设备自定义视图大小

益兴生
2023-03-14
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();

我不认为为每个决议创建新视图是一个好主意。我尝试将视图缩放为default_size乘以设备的密度(float scale=getResources().getdisplaymetrics().density;),但这对低分辨率设备没有影响,但在高分辨率设备上,视图占用了整个屏幕(您看不到)

那么为不同设备制作自定义视图的最佳方式是什么呢?是我说的对还是有别的方法

共有1个答案

赫连鸿振
2023-03-14

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

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

在自定义视图的构造函数中,在res/values/dimes.xml中使用:

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

现在,由于设备屏幕的密度,尺寸将被缩放。

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);
    }
}
public void setDefaultSizeDp(int defaultSizeDp)
    {
        int defaultSizePx = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, defaultSizeDp, getResources().getDisplayMetrics());

        m_defaultSize = defaultSizePx;
        invalidate();
    }
 类似资料:
  • 英文原文:http://emberjs.com/guides/views/customizing-a-views-element 视图在页面上表现为一个单一的DOM元素。通过修改tagName属性,可以改变视图生成的元素的类型。 1 2 3 App.MyView = Ember.View.extend({ tagName: 'span' }); 另外,还可以通过设置一个字符串数组到clas

  • 获取设备配置信息 根据业务需求获取设备 配置的各种信息。 参数说明 字段 类型 必须 备注 device RKDevice 是 设备 namespace String 是 存储空间、根据业务填写 key String 是 信息存储Key 示例代码 Swift: RokidMobileSDK.device.getServiceInfo(device: RKDevice, namespace: Str

  • 获取设备配置信息 根据业务需求获取设备 配置的各种信息。 参数说明 字段 类型 必须 备注 deviceId String 是 设备Id namespace String 是 存储空间、根据业务填写 key String 是 信息存储Key 示例代码: Kotlin val deviceId: String = "XXX" val namespace: String = "YYY" val ke

  • 我正在为Wordpress站点构建一个自定义博客列表页面,并尝试使用自定义图像大小。图像的高度应为硬300px。所有图像都比这个高,所以不用担心更小的图像。 我想要的宽度是500px。这就是我遇到问题的地方。我试图使用Wordpress的“添加图像大小”功能来实现这个功能,但我一直得到精确尺寸的裁剪。 例如,我使用以下代码,它为我提供了一个精确的300x300像素图像: 我甚至尝试将硬裁剪值添加到

  • 谁来帮我解决一下这个问题。因为这个问题我已经卡了3天了-_-! 我可以使listview与图像和文本使用凌空库,它的作品在模拟器(我使用geny运动模拟器)的图像和文本显示。但是当我在我的设备(Android果冻4.3.0)中运行它时,listview是空的。层是空白的(空的)。我不知道为什么。 这是我的片段代码 我确定 URL 很好,并且图像返回 http://192.168.117.1:808

  • 英文原文:http://emberjs.com/guides/views/defining-a-view/ 你可以使用Ember.View来渲染一个Handlebars模板并将它插入到DOM中。 为了告诉视图要用哪个模板,可以设置它的temaplateName属性。例如,如果我有一个像这样的<script>标签: 1 2 3 4 5 6 7 <html> <head> <script