我有一个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}}以便它自动完成工作?
请帮帮我。提前谢谢!
答案 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;
}
}