Android - 如何获得bottomnavigationview的高度

时间:2017-05-29 08:11:05

标签: android material-design bottomnavigationview

我创建了一个底部导航视图。我试图获得底部导航视图的高度。 Material design说高度应该是56dp。我不想使用硬编码值,因为我不确定这个值是否会改变。如何以编程方式获取视图的维度,例如获取状态栏的高度。

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

3 个答案:

答案 0 :(得分:1)

您可以在onCreate方法中执行此操作:

   bottomNavigationView.post(new Runnable() {
        @Override
        public void run() {
            int height = (int) bottomNavigationView.getMeasuredHeight();
        }
    });

这将为您提供高度(以像素为单位)。 希望这有帮助

答案 1 :(得分:1)

这是另一种方法。为了以编程方式获得BottomNavigationView的高度,我使用ViewTreeObserver。这使我可以在绘制视图后获得正确的视图值。下面是示例代码:

BottomNavigationView mBottomNavigation= findViewById(R.id.navigation);
    ViewTreeObserver viewTreeObserver = mBottomNavigation.getViewTreeObserver();
            if (viewTreeObserver.isAlive()) {
                viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                    @Override
                    public void onGlobalLayout() {
                        int viewHeight = mBottomNavigation.getHeight();
                        if (viewHeight != 0)
                            mBottomNavigation.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                        //viewWidth = mBottomNavigation.getWidth(); //to get view's width
                    }
                });
            }

一旦我们获得视图的高度,删除viewObserver侦听器就非常重要,我正在使用以下方法删除viewObserver:

removeOnGlobalLayoutListener(this)

以便它停止监听该视图中的每个更改。

答案 2 :(得分:0)

这是实现 BottomNavigationView 高度的基本代码,

int resourceId = getResources().getIdentifier("design_bottom_navigation_height", "dimen", this.getPackageName());
        int height = 0;
        if (resourceId > 0) {
            height = getResources().getDimensionPixelSize(resourceId);
        }
        //height in pixels
        Toast.makeText(this, height + "", Toast.LENGTH_SHORT).show();
        // if you want the height in dp
        float density = getResources().getDisplayMetrics().density;
        float dp = height / density;
        Toast.makeText(this, dp + "", Toast.LENGTH_SHORT).show();