Android的:如何获得代码中的“listPreferredItemHeight”属性的值?

下面的代码给出了Resources$NotFoundException

 TypedValue value = new TypedValue(); ((Activity)context).getResources().getValue(android.R.attr.listPreferredItemHeight, value, true); 

编辑:更多的代码添加回应答案。

当我运行下面的代码时, displayMetrics所有成员都是0。

 TypedValue value = new TypedValue(); DisplayMetrics displayMetrics = new DisplayMetrics(); ((Activity)context).getTheme().resolveAttribute(android.R.attr.listPreferredItemHeight, value, true); float ret = value.getDimension(displayMetrics); 

这工作:

 TypedValue value = new TypedValue(); ((Activity)context).getTheme().resolveAttribute(android.R.attr.listPreferredItemHeight, value, true); 

编辑:你得到零,因为没有正确初始化DisplayMetrics实例。 它需要一个参考框架(一个显示器)来做任何有意义的转换。

 android.util.TypedValue value = new android.util.TypedValue(); boolean b = getTheme().resolveAttribute(android.R.attr.listPreferredItemHeight, value, true); String s = TypedValue.coerceToString(value.type, value.data); android.util.DisplayMetrics metrics = new android.util.DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); float ret = value.getDimension(metrics); 

在我的Nexus 1上是64.0dipret96

另一个答案

 public float getItemHeight() { TypedValue value = new TypedValue(); DisplayMetrics metrics = new DisplayMetrics(); context.getTheme().resolveAttribute( android.R.attr.listPreferredItemHeight, value, true); ((WindowManager) (context.getSystemService(Context.WINDOW_SERVICE))) .getDefaultDisplay().getMetrics(metrics); return TypedValue.complexToDimension(value.data, metrics); } 

它可能更有用。

费米的回答非常有帮助。 不想减损他的答案,我已经采取了逻辑,并把它放在一个图书馆便利的方法 ,你应该能够即插即用。 我计划随着时间的推移使用其他属性方法更新代码。 我希望它certificate对某人有用。

(请注意,我发现Resources.getDisplayMetrics()似乎是返回显示度量标准的简单方法,而不是查询WindowManager。)

最短的答案(没有DisplayMetrics

 TypedValue typedValue = new TypedValue(); context.getTheme().resolveAttribute(android.R.attr.listPreferredItemHeight, typedValue, true); int height = TypedValue.complexToDimensionPixelSize(typedValue.data, context.getResources().getDisplayMetrics());