获得活动的高度(可用且可见)

问题描述 投票:1回答:2

我想将GraphView插入到LinearLayout中以在屏幕上显示它(图形),并且由于GraphView限制我不能使用android:layout_height =“wrap_content”用于我的LinearLayout所以我将使用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();
}
}
android eclipse android-activity height
2个回答
0
投票
getWindowManager().getDefaultDisplay().getMetrics(metrics);

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


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);
 }
© www.soinside.com 2019 - 2024. All rights reserved.