364

Androidのステータスバーの高さは? いつも同じですか?

私の測定では 25 dp のようですが、すべてのプラットフォームで同じ高さかどうかはわかりません。

(ステータスバーを持たないアクティビティからステータスバーを持つアクティビティへのフェードトランジションを適切に実装するためにこれを知りたいです)

4

23 に答える 23

387

この質問は以前に回答済みです... ステータスバーの高さは?

更新::

現在の方法:

ステータス バーの高さは画面サイズによって異なります。 480 x 800 のデバイスの場合、ステータス バーの高さは 38 ピクセルにする必要があります

このスクリプトを使用してステータスバーの高さを取得することをお勧めします

Rect rectangle = new Rect();
Window window = getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rectangle);
int statusBarHeight = rectangle.top;
int contentViewTop = 
    window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
int titleBarHeight= contentViewTop - statusBarHeight;

   Log.i("*** Elenasys :: ", "StatusBar Height= " + statusBarHeight + " , TitleBar Height = " + titleBarHeight); 

onCreate()(古いメソッド)アクティビティのメソッドでステータス バーの高さを取得するには、次のメソッドを使用します。

public int getStatusBarHeight() { 
      int result = 0;
      int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
      if (resourceId > 0) {
          result = getResources().getDimensionPixelSize(resourceId);
      } 
      return result;
} 
于 2010-08-04T22:02:44.090 に答える
225

onCreateステータスバーの高さを取得するために使用したすべてのコードサンプルのうち、anのメソッドで実際に機能しているように見えるのActivityは次のとおりです。

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

どうやら、ステータスバーの実際の高さはAndroidリソースとして保持されています。上記のコードは、ContextWrapperクラス(例:)に追加できますActivity

http://mrtn.me/blog/2012/03/17/get-the-height-of-the-status-bar-in-android/にあります

于 2013-01-08T10:35:39.000 に答える
50

MDPIデバイスでは、ステータスバーは25pxです。これをベースとして使用し、密度(切り上げ)を掛けて、任意のデバイスのステータスバーの高さを取得できます。

int statusBarHeight = Math.ceil(25 * context.getResources().getDisplayMetrics().density);

参考:ldpi = .75、mdpi = 1、hdpi = 1.5、xhdpi = 2

于 2011-10-04T05:30:57.763 に答える
39

いくつかのソリューションをまとめました:

public static int getStatusBarHeight(final Context context) {
    final Resources resources = context.getResources();
    final int resourceId = resources.getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0)
        return resources.getDimensionPixelSize(resourceId);
    else
        return (int) Math.ceil((VERSION.SDK_INT >= VERSION_CODES.M ? 24 : 25) * resources.getDisplayMetrics().density);
    }

別の選択肢:

    final View view = findViewById(android.R.id.content);
    runJustBeforeBeingDrawn(view, new Runnable() {
        @Override
        public void run() {
            int statusBarHeight = getResources().getDisplayMetrics().heightPixels - view.getMeasuredHeight();
        }
    });

編集: runJustBeforeBeingDrawn の代替: https://stackoverflow.com/a/28136027/878126

于 2015-03-10T14:07:56.650 に答える
20

これは参照リンクでも機能します

public int getStatusBarHeight() {
  int result = 0;
  int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
  if (resourceId > 0) {
      result = getResources().getDimensionPixelSize(resourceId);
  }
  return result;
}
于 2013-05-13T13:55:37.020 に答える
14

onCreateでステータスバーの高さを取得しなければならないという同じ問題があります。これは私にとってはうまくいきます。

private static final int LOW_DPI_STATUS_BAR_HEIGHT = 19;

private static final int MEDIUM_DPI_STATUS_BAR_HEIGHT = 25;

private static final int HIGH_DPI_STATUS_BAR_HEIGHT = 38;

onCreate の内部:

DisplayMetrics displayMetrics = new DisplayMetrics();
((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(displayMetrics);

int statusBarHeight;

switch (displayMetrics.densityDpi) {
    case DisplayMetrics.DENSITY_HIGH:
        statusBarHeight = HIGH_DPI_STATUS_BAR_HEIGHT;
        break;
    case DisplayMetrics.DENSITY_MEDIUM:
        statusBarHeight = MEDIUM_DPI_STATUS_BAR_HEIGHT;
        break;
    case DisplayMetrics.DENSITY_LOW:
        statusBarHeight = LOW_DPI_STATUS_BAR_HEIGHT;
        break;
    default:
        statusBarHeight = MEDIUM_DPI_STATUS_BAR_HEIGHT;
}

見る:

http://developer.android.com/reference/android/util/DisplayMetrics.html http://developer.android.com/guide/practices/ui_guidelines/icon_design.html

于 2011-02-01T17:32:54.800 に答える
13

はい、ビューで試してみると、25px の結果が得られます。コード全体は次のとおりです。

public class SpinActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LinearLayout lySpin = new LinearLayout(this);
        lySpin.setOrientation(LinearLayout.VERTICAL);       
        lySpin.post(new Runnable()
        {
            public void run()
            {
                Rect rect = new Rect();
                Window window = getWindow();
                window.getDecorView().getWindowVisibleDisplayFrame(rect);
                int statusBarHeight = rect.top;
                int contentViewTop = 
                    window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
                int titleBarHeight = contentViewTop - statusBarHeight;
                System.out.println("TitleBarHeight: " + titleBarHeight 
                    + ", StatusBarHeight: " + statusBarHeight);
            }
        }
    }
}
于 2011-01-28T19:54:28.033 に答える
9

240x320 - 20 ピクセル

320x480 - 25 ピクセル

480x800+ - 38px

于 2010-11-18T14:35:43.460 に答える
8

これを試して:

    Rect rect = new Rect();
    Window win = this.getWindow();
    win.getDecorView().getWindowVisibleDisplayFrame(rect);
    int statusBarHeight = rect.top;
    int contentViewTop = win.findViewById(Window.ID_ANDROID_CONTENT).getTop();
    int titleBarHeight = contentViewTop - statusBarHeight;
    Log.d("ID-ANDROID-CONTENT", "titleBarHeight = " + titleBarHeight );

アクティビティのonCreateメソッドでは機能しませんでしたが、onClickListenerに入れて25の測定値を与えたときに機能しました

于 2010-08-04T16:19:04.357 に答える
7

Android 6.0 では、ステータス バーの高さは 24 dp です。

 <!-- Height of the status bar -->
 <dimen name="status_bar_height">24dp</dimen>
 <!-- Height of the bottom navigation / system bar. -->
 <dimen name="navigation_bar_height">48dp</dimen>

ソースコードで答えを見つけることができます:frameworks\base\core\res\res\values\dimens.xml

于 2016-12-12T09:51:52.457 に答える
6

これを解決するために、組み合わせアプローチを使用しました。タブレットでは、display.getHeight() が呼び出されたときに、システム バーが既にピクセルを減算しているため、これが必要です。そのため、最初にシステム バーが存在するかどうかを確認し、次に Ben Claytons のアプローチを採用しました。これは電話で問題なく動作します。

public int getStatusBarHeight() {
    int statusBarHeight = 0;

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

    return statusBarHeight;
}

private boolean hasOnScreenSystemBar() {
    Display display = getWindowManager().getDefaultDisplay();
    int rawDisplayHeight = 0;
    try {
        Method getRawHeight = Display.class.getMethod("getRawHeight");
        rawDisplayHeight = (Integer) getRawHeight.invoke(display);
    } catch (Exception ex) {
    }

    int UIRequestedHeight = display.getHeight();

    return rawDisplayHeight - UIRequestedHeight > 0;
}
于 2013-06-16T20:58:27.943 に答える
3

一部の人々にとって一番の答えがうまくいかない理由は、レンダリングの準備が整うまでビューの寸法を取得できないためです。OnGlobalLayoutListener実際にできる場合は、を使用して上記の寸法を取得します。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final ViewGroup decorView = (ViewGroup) this.getWindow().getDecorView();
    decorView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            if (Build.VERSION.SDK_INT >= 16) {
                decorView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            } else {
                // Nice one, Google
                decorView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
            }
            Rect rect = new Rect();
            decorView.getWindowVisibleDisplayFrame(rect);
            rect.top; // This is the height of the status bar
        }
    }
}

これが最も信頼できる方法です。

于 2016-02-29T00:35:28.830 に答える
2

サイズと身長が正確にわかっている場合

お気に入り

たとえば、画面サイズが 320 X 480 のデバイスの場合、ステータス バーの高さは 25 ピクセルです。480 X 800 のデバイスの場合、ステータス バーの高さは 38 ピクセルにする必要があります。

次に、ビューの幅/画面サイズを取得するだけで、if elseステートメントを使用してステータスバーの高さを取得できます

于 2010-10-17T21:16:46.350 に答える