有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java根据屏幕分辨率以编程方式创建视图

我创建了一个实现ListAdapter的BaseAdapter。这个BaseAdapter读取一个JSON文件,并通过自定义布局填充我的ListView

在这个JSON文件中,我有一个布尔值(active=true或active=false)。如果active为true,我会放大自定义布局,一切正常,但如果active为false,我需要在此自定义布局中创建一个新视图。这是我的代码:

if (!active) {
    JSONObject notifications = jsonData.getJSONObject("notifications");
    String message = notifications.getString("message");

    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    params.addRule(RelativeLayout.ALIGN_PARENT_TOP);
    params.height = 70;

    TextView warning = new TextView(Controller.getContext());
    warning.setText(message);
    warning.setTextColor(Color.WHITE);
    warning.setBackgroundColor(Color.RED);
    warning.setGravity(Gravity.CENTER);
    warning.setPadding(10, 0, 10, 0);
    warning.setLayoutParams(params);

    // contentFrame is a RelativeLayout where the view is created;
    viewHolder.contentFrame.getLayoutParams().height = 320;
    viewHolder.contentFrame.addView(warning);
 }

我的问题是:

params.height = 70;
viewHolder.contentFrame.getLayoutParams().height = 320;

我是说我的文本视图高出70像素,而我的RelativeLayout现在高出320像素

它在我的手机上看起来不错,但如果我在其他分辨率的手机上测试,它看起来会不一样,对吗

有没有办法根据屏幕分辨率创建视图并定义高度或宽度?也许创建屏幕分辨率10%的视图?这是个好习惯吗?对于这样的事情,最好的办法是什么


共 (1) 个答案

  1. # 1 楼答案

    不要使用硬编码像素值,而是使用DPs。DPs考虑了设备密度,因此无论应用程序运行在哪台设备上,视图都几乎相同

    更多信息请参见this

    所以,在你的维度中定义它。xml:

    <resources>
        <dimen name="my_width">320dp</dimen>
    </resources>
    

    然后这样读:

    int width =  getResources().getDimensionPixelSize(R.dimen.my_width);