web-dev-qa-db-ja.com

Android-bottomnavigationviewの高さを取得する方法

下部のナビゲーションビューを作成します。下のナビゲーションビューの高さを取得しようとしています。 マテリアルデザイン 高さは56dpである必要があることを示しています。この値が変更されないかどうかわからないため、ハードコードされた値を使用したくありません。ステータスバーの高さを取得するように、プログラムでビューの寸法を取得するにはどうすればよいですか。

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

これは、onCreateメソッドでこれを行うことができます。

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

これにより、高さがピクセル単位で表示されます。お役に立てれば

3
Sarthak Gandhi

これは、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();

これが別のアプローチです。 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)

そのため、そのビューのすべての変更を聞くのをやめます。

1
Vijay E