1

我想将 GraphView 插入 LinearLayout 以在屏幕上显示它( graph ),并且由于 GraphView 的限制,我不能为我的 LinearLayout 使用 android:layout_height="wrap_content" 所以我将使用 LinearLayout.setScaleY 代码使 GraphView 填满屏幕。现在,我想问:

--- 有没有更好的方法让 LinearLayout 在没有 android:layout_height="wrap_content" 代码的情况下填满屏幕?

如果没有,我怎样才能获得活动的真实可用高度以在我的代码中使用它而不是 metrics.heightPixels ?+ 我已经设置了 LinearLayout 500dp 的高度,所以我在我的代码中使用了 500...

我的代码在这里:

LinearLayout mLL = (LinearLayout) findViewById(R.id.mLL);

    DisplayMetrics metrics = this.getResources().getDisplayMetrics();
    mLL.setScaleY(metrics.heightPixels/(float)500);

    mLL.addView(mGraphView);

谢谢你 :)


解决了 !(由于声誉低,我要等几个小时才能回答我的问题,所以我编辑了我的帖子...... :))

我必须像这样在 XML 文件中定义 LinearLayout:

<LinearLayout
    android:id="@+id/mLinearLayout"
    android:layout_width="fill_parent"
    android:layout_height="100dp"
    android:layout_above="@+id/mlinearLayout2"
    android:layout_below="@+id/title"
    android:layout_centerHorizontal="true"
    android:orientation="vertical" >

如您所见,我一起使用了 android:layout_height="100dp" 和 android:layout_above="@+id/mlinearLayout2" (我在 mLinearLayout 下使用了另一个线性布局)代码,然后在 FullScreen 中无需任何 ForceClose 即可查看 Graph LinearLayout :) 我希望这篇文章可以帮助其他人通过一些代码更改轻松解决他们的类似问题!:)

我也发现了这一点:如果你想获得 LinearLayout 高度,你可以使用这个代码:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus == true) {
    LinearLayout myLinearLayout = (LinearLayout) findViewById(R.id.myLinearLayout);
    int layoutWidth = myLinearLayout.getWidth();
    int layoutHeight = myLinearLayout.getHeight();
}
}
4

2 回答 2

0
getWindowManager().getDefaultDisplay().getMetrics(metrics);

我不知道是否提供与您相同的输出,但值得一试。基于metrics.heightPixels,我认为您可以调整视图的尺寸

于 2013-07-27T13:21:19.447 回答
0

我在互联网上搜索了一种简单的方法,但经过数小时的搜索却找不到。

这是我使用的,因为没有办法(似乎)直接获取这个值。我首先得到显示器的尺寸。我获得动作和通知栏的高度并减去它们:

int height = 0;

private void obtainHeight() {
    int actionBarHeight = 0;
    int notificationBarHeight = 0;

    Display display = getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    height = size.y;

    TypedValue tv = new TypedValue();
    if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) {
        actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics());
    }

    int resourceIdStatusBar = getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceIdStatusBar > 0) {
        notificationBarHeight = getResources().getDimensionPixelSize(resourceIdStatusBar);
    }

    height = height - actionBarHeight - notificationBarHeight;
}

您可以使用的导航栏(不需要减去,因为它通常不是显示的一部分):

 Resources resources = this.getResources();
 int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
 if (resourceId > 0) {
       naviigationBarHeight = resources.getDimensionPixelSize(resourceId);
 }
于 2019-03-27T15:30:41.880 回答