在Android中以编程方式设置密度像素无法正常运行

时间:2015-07-24 09:56:06

标签: android xml layout screen pixel-density

我有一个显示新闻项目的列表视图。

每个新闻项目可能包含/不包含图片。

如果确实包含图像,请冷静!

如果它不包含图像我将图像占位符设置为不可见,并调整其所包含的框架布局的大小。

我将首先显示列表视图的图像:

enter image description here

正如您可以看到新闻 ,图片正常运作。 但是没有图像的新闻项目不是!!。

在我的XML布局文件中,我将博客/新闻文本视图高度设置为30dp。

        <TextView
            android:layout_width="match_parent"
            android:layout_height="30dp"

因此,当没有图像存在时,我运行以下代码:

    if(no image is loaded)

        nimage.setVisibility(View.GONE); // set image placeholder to hidden
        // change frame layout height to 30dp (size of News/Blog)
        flayout1.getLayoutParams().height = (int)convertPixelsToDp(30, getContext()); 
        flayout1.requestLayout();

我的convertPixelsToDp()函数是这样的:

public static float convertPixelsToDp(float px, Context context){
    Resources resources = context.getResources();
    DisplayMetrics metrics = resources.getDisplayMetrics();
    float dp = px / (metrics.densityDpi / 160f);
    return dp;
}

这段代码应该有用,......我想。但显然,正如您在上面所看到的,高度设置不正确。即 - 一些TextView被切断了。

问题是,当我在较小的屏幕上运行时,它运行得很好,但不应该是屏幕大小独立(使用dp)...也许我的转换功能有问题?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

使用wrap_content作为TextView的布局高度。这应该可以解决您的问题。