listview的WRAP_CONTENT无法正常工作

时间:2016-09-09 13:58:36

标签: android

我有一个ListView,其中包含在运行时流程中ListView添加的应用图标列表。我希望我的WRAP_CONTENT宽度为WRAP_CONTENT。但WRAP_CONTENT无法正常工作,而且从某些资源我听说MATCH_PARENT无法尝试使用ListView。当我尝试它掩盖整个屏幕。我在服务类中使用LinearLayout.LayoutParams listParam = new LinearLayout.LayoutParams(100, ViewGroup.LayoutParams.MATCH_PARENT); listLinear.setLayoutParams(listParam); //listLinear is my linearLayout on Listview is implemented. listView.setLayoutParams(listParam); listLinear.addView(listView); 所以我以编程方式使用它:

首先,我创建了一个简单的线性布局,如下所示:

LinearLayout

此处WRAP_CONTENT的宽度设置为80,因为ListView不起作用所以我通过传递值来调整其宽度大小。我正在我的 Moto e(第1代)测试,其屏幕英寸 4.3英寸。但是当我在屏幕英寸为 5英寸的设备中进行测试时,它只是将WRAP_CONTENT内的内容调整为小,我必须将布局宽度设置为100,然后才会看起来很完美。

那么如何启用ListView的{​​{1}}以便它自动完成工作?

请帮帮我。提前谢谢!

1 个答案:

答案 0 :(得分:0)

永远不要在pixels中给出尺寸,例如 80 100 。随着设备更改分辨率的变化,它将在不同设备上看起来不同。根据每个设备的density independent pixel(dp),更好地使用以下功能将维度从pixels转换为等效density

因此,您可以使用DimensionUtils.dpToPx(80)代替 80

public final class DimensionUtils {

    private static boolean isInitialised = false;
    private static float pixelsPerOneDp;

    // Suppress default constructor for noninstantiability.
    private DimensionUtils() {
        throw new AssertionError();
    }

    private static void initialise(View view) {
        pixelsPerOneDp = view.getResources().getDisplayMetrics().densityDpi / 160f;
        isInitialised = true;
    }

    public static float pxToDp(View view, float px) {
        if (!isInitialised) {
            initialise(view);
        }

        return px / pixelsPerOneDp;
    }

    public static float dpToPx(View view, float dp) {
        if (!isInitialised) {
            initialise(view);
        }

        return dp * pixelsPerOneDp;
    }
}