我正在尝试获取列表视图中项目占用的高度。所以我写了下面的代码:
mLisVieMeineDocs.post(new Runnable() {
@Override
public void run() {
h = mLisVieMeineDocs.getHeight();
Log.d(TAG, "getHeight :" + h);//returns 108
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) mLisVieMeineDocs.getLayoutParams();
params.width = LinearLayout.LayoutParams.MATCH_PARENT;
params.height = h;
mLisVieMeineDocs.setLayoutParams(params);
}
});
如代码中所述,“getHeight”返回108.当我尝试在xml文件中listview的容器的layout_height中设置此值“108”时,如下所示:
<LinearLayout
android:id="@+id/versicherungsListeActivity2mod_linLay_meineDocList_container"
android:layout_width="match_parent"
android:layout_height="108dp" <<<------
android:orientation="vertical"
android:layout_below="@+id/versicherungslistsactivity2mod_linLay_meineDocsBar_container">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<!--android:transcriptMode="alwaysScroll"
android:stackFromBottom="true"-->
<ListView
android:id="@+id/versicherungsListeActivity2mod_lisVie_meineDocs"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</ScrollView>
</LinearLayout>
我发现linearlayout扩展到listview despit中最多包含2个项目,上面的代码表明listview中项目的高度为108 但是,当我在xml文件中将108更改为54dp时
android:layout_height="54dp"
然后,linearlayout扩展为精确地包装在listview中的项目上。
那么,为什么“getHeight”会返回视图高度的两倍?为什么我需要将“getHeight”返回的值除以得到视图的确切高度
答案 0 :(得分:0)
您需要将像素转换为dp,请参阅下面的代码。
h = pxToDp(mLisVieMeineDocs.getHeight());
public static int pxToDp(int px) {
return (int) (px / Resources.getSystem().getDisplayMetrics().density);
}
public static int dpToPx(int dp) {
return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
}
答案 1 :(得分:0)
Java中的大多数值都是Pixel
,所以你需要改变它。
public static int dip2px(Context context, float dp) {
float scale = context.getResources().getDisplayMetrics().density;
return (int) (dp * scale + 0.5f);
}
public static int px2dip(Context context, float px) {
float scale = context.getResources().getDisplayMetrics().density;
return (int) (px / scale + 0.5f);
}
有时你应该设置DP / SP值,例如:
badgeCountTv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);
TypedValue.COMPLEX_UNIT_DIP, TypedValue.COMPLEX_UNIT_PX....
答案 2 :(得分:0)
使用以下方法从DP转换为Pixel:
public static float convertDpToPixel(float dp, Context context){
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
float px = dp * ((float)metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT);
return px;
}
使用以下方法从Pixel转换为DP:
public static float convertPixelsToDp(float px, Context context){
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
float dp = px / ((float)metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT);
return dp;
}