Androidのステータスバーの高さ


332

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

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

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


クロスフェードを行う場合は、ステータスバーの高さを知る必要はありません。
ステルスコプター2010

2
一部の要素はレイアウトの中央に配置されているため、これは必要です。また、要素を互いにフェードインさせる必要があります。
hpique

回答:


363

この質問は以前に回答されました... ステータスバーの高さ?

更新 ::

現在の方法:

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

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

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;
} 

ではない正確に。また、ステータスバーの高さがすべてのデバイスで同じであると想定できるかどうかも尋ねています。
hpique 2010

16
またはディップを使用しますか?常に25dipであれば、コードは必要ありません。
hpique 2010

8
常に25 dpであるとは限りません(たとえば、火の炎の高さを確認してください)。
DallinDyer 2012年

1
onCreate()でview.post()に渡されたランナブルでは機能しません-0を返します
Ixx

4
window.getDecorView().getWindowVisibleDisplayFrame(rectangle)マルチウィンドウモード+縦向き回転+ 2番目のウィンドウの場合、ステータスバーの高さを取得する正しい方法ではありません。あなたは巨大な価値を得るでしょう(最初の高さを含む)。
Tuan Chau

211

ステータスバーの高さを取得するために使用したすべてのコードサンプルのうち、実際にのonCreateメソッドで機能しているように見えるのは次のものだけ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/


ハードコーディングするのではなく、動的に計算する方が良いでしょう。上記の方法でうまくいきました!
錬金術師

代わりにgetDimension(...)を使用すべきではありませんか?
Android開発者

6
注意点-これはすべてのデバイスで機能するわけではありません。たとえば、トランスフォーマーTF201(およびTF101、TF300、その他のデバイス)では、ステータスバーがない場合、高さが25と報告されます。
BłażejCzapp

4
上記のコメントに基づくと、コードは特定のデバイスのステータスバーの高さを示しているように見えます。特定のアクティビティ(実際にはステータスバーがない場合があります)の高さではありません。
ボーッ

XMLではdimenリソース "@android:dimen / status_bar_height"を使用できます。<!-Androidシステムソースファイルで定義されたステータスバーの高さ-> <dimen name = "status_bar_height"> 24 dp </ dimen>。ただし、アプリプロジェクトで直接参照することはできません。したがって、コードを使用する必要があります。
Tshunglee 2018

48

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

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

参考のために:ldpi = .75、mdpi = 1、hdpi = 1.5、xhdpi = 2


6
これは、ステータスバーのあるデバイスに適してます。上記が書かれたので、すべてのデバイスが1つを持っているとは限らないことが本当になったことに注意してください。具体的には、ICSを実行しているデバイスの下部にステータス/ナビゲーションバーの組み合わせがあり、上部には何もない場合があります。そのため、その場合、ほとんどのプログラミング目的で、ステータスバーに高さ0を割り当てる必要がありますが、上記の公式ではゼロ以外のサイズが得られます。
Carl

1
また、25px値は、すべてのmdpiデバイスに対して正しくありません。APIレベルによって異なる場合があります。例えば、10.1 WXGAタブレットエミュレータデバイスは、API 24でAPI 16&19で25ピクセルが、24ピクセルを報告
jk7

48

サイズをハードコーディングするか、リフレクションを使用しての値を取得することstatus_bar_heightは悪い習慣と見なされます。Chris Banes はこれについてDroidcon New Yorkで話しました。ステータスバーのサイズを取得するための推奨される方法は、OnApplyWindowInsetsListenerを使用する方法です。

myView.setOnApplyWindowInsetsListener { view, insets -> {
  val statusBarSize = insets.systemWindowInsetTop
  return insets
}

これはAPI 20で追加され、ViewAppCompatを介してバックポートされます。


これが今日最も正確な答えです
キース

私にとってこれは一度だけ発砲します、もし私がボトムナビゲーションを介してフラグメントを持っているなら。フラグメントを再度置き換えると、このリスナーは呼び出されません。互換ゲッターもありますか?
urSus 2018年

74
それでも、このAPIは恐ろしいです。舞台裏のWTF / Gotchaの数が膨大だからです。あなたはそれをどんなビューでも実行できると思いますが、いいえ、特定のことをオーバーライドして、インセットを子供に渡すことを確認する必要があります(??)線形レイアウト?ConstraintLayout?hello?)。システムがWindow.getStatusBarSize()を持っている代わりに、FREAKING LISTENERにサブスクライブする必要があります...帰宅Android、酔っ払っています。Googleが起動するまでサイズをハードコードするだけで、私たちは2018年にいます
。ChrisBanes

私の場合、それは解雇されていません。Activity#onCreatedとします。私は何か間違ったことをしましたか?さらに、なぜmView.getRootWindowInsets()を使用しないのですか?
Adil Aliyev、

34

私はいくつかのソリューションを一緒にマージしました:

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


getResources()。getDisplayMetrics()。heightPixels -getActivity()。findViewById(android.R.id.content).getMeasuredHeight()がandroid lolipopで機能しない
abbasalim

@ ArMo372回答が更新されました。ビューが最初に測定を渡す必要があるというだけです。すでに渡した場合は、runJustBeforeBeingDrawnを使用する必要はありません。早すぎる場合にのみ使用します。
Android開発者

28

Googleの設計ガイドラインによると、ステータスバーの高さは24 dpです。

ステータスバーの高さをピクセル単位で取得する場合は、以下の方法を使用できます。

private static int statusBarHeight(android.content.res.Resources res) {
    return (int) (24 * res.getDisplayMetrics().density);
}

これは以下のアクティビティから呼び出すことができます:

statusBarHeight(getResources());

18
マシュマロまでは25 dpでした。マシュマロ以降は24 dpです。
Eugen Pechanec 2015

1
これは本質的に値をハードコーディングしています-設計変更を許可していません
シリコン

1
また、ステータスバーが同じケースで表示されないという事実は考慮されていません
jk7

19

以前の高さは25dpでした。Android Marshmallow(API 23)では、高さが24 dpに削減されました。

更新:ノッチとパンチ全体のカメラの時代が始まったため、ステータスバーに静的な高さを使用することはできなくなりました。代わりにウィンドウインセットを使用してください!


1
甘い!高さを24 dpにハードコーディングした、APIレベル23以上専用のdimens.xmlを作成しました。
誰かどこか

18

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

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

13

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


3
密度主導の値を使用するという考えが気に入っています。複数の場所でコードを使用する場合(または他の密度関連の値を使用する場合)、作業をシステムにオフロードし、値をdimenリソースに格納することをお勧めします。これにより、スイッチが不要になります。密度ごとにディメンション固有のフォルダーとリソースファイルを作成する必要があります。最終的なリソースres = context.getResources(); int statusbarHeight = 0; {statusbarHeight = res.getDimensionPixelSize(R.dimen.android_statusbar_height);を試してください。} catch(NotFoundException e){}
ProjectJourneyman

5
これらの値をハードコーディングすることは危険です。新しいプラットフォームバージョンで変更された場合はどうなりますか
David Snabel-Caunt

ハードコーディングされたピクセルサイズ(密度ごとに1つ)を使用する代わりに、 "25dp"を使用するほうがよいと思います。
Android開発者


12

はい、ビューで試してみると、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);
            }
        }
    }
}

上記のコードは、上記のように新しい線形レイアウトを作成するときに機能しますが、xmlからlySpinに対してfindviewbyidを実行すると機能します。次にnullを返します。理解していないので、そのように動作しています。
Shaista Naaz

レイアウトがまだ描画されていないため、onCreateではまだレイアウトのサイズがわかりません。私が通常行うことは、UIが自身を描画する時間を与えるonCreateから、UIスレッドにRunnableをポストすることです。
Jason Robinson、

8

240x320-20ピクセル

320x480-25px

480x800以上-38ピクセル


3
これはもはや正確ではありません。ステータスバーの測定方法を使用します。
Michael

7

これを試して:

    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にすると機能しました


彼がonCreate()でテストした時点では、ステータスバーはまだ作成されていなかったと思います。対照的に、onClickListener()コードをアクティブにするために手動でクリックしたとき、バーには表示するのに十分な思考タイプの時間があり、そのサイズを取得することができました。
12年

6

ステータスバーの高さは、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


このリソースをXMLで取得する方法はありますか?@android:dimen/status_bar_height私のために動作しません
パトリック

4

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

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;
}

3

@Niklas +1のおかげで、これは正しい方法です。

public class MyActivity extends Activity implements android.support.v4.View.OnApplyWindowInsetsListener {

    Rect windowInsets;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.my_activity);

        View rootview = findViewById(android.R.id.content);

        android.support.v4.View.ViewCompat.setOnApplyWindowInsetsListener(rootview, this);
    }

    android.support.v4.View.WindowInsetsCompat android.support.v4.View.OnApplyWindowInsetsListener.OnApplyWindowInsets(View v, android.support.v4.View.WindowInsetsCompat insets)
    {
        windowInsets = new Rect();
        windowInsets.set(insets.getSystemWindowInsetLeft(), insets.getSystemWindowInsetTop(), insets.getSystemWindowInsetRight(), insets.getSystemWindowInsetBottom());
        //StatusBarHeight = insets.getSystemWindowInsetTop();

        //Refresh/Adjust view accordingly

        return insets;
    }
}

コードが100%正しくなく、Xamarin C#から変換したものである場合は失礼しますが、これはそれだけです。ノッチなどで動作します


2

フルスクリーンソリューションの切り替え:

この解決策は回避策のように見えるかもしれませんが、実際にはアプリがフルスクリーン(別名ステータスバーを非表示)かどうかを考慮しています:

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point(); display.getSize(size);
int barheight = size.y - findViewById(R.id.rootView).getHeight();

これにより、アプリが現在フルスクリーンの場合、barheight0になります。

個人的には、これを使用して、TouchEventの絶対座標を修正し、ステータスバーを説明する必要がありました。

@Override
public boolean onTouch(View view,MotionEvent event) {
    Display display = getWindowManager().getDefaultDisplay();
    Point size = new Point(); display.getSize(size);
    int YCoord = (int)event.getRawY() - size.y + rootView.getHeight());
}

そして、それはアプリがフルスクリーンであるかどうかに関係なく絶対y座標を取得します。

楽しい


おかげで、これはAndroidキーボードも表示されているときに機能した唯一のソリューションでした。
チアゴモウラ

2

Android 4.1以降では、ステータスバーの後ろに表示されるようにアプリケーションのコンテンツを設定できます。これにより、ステータスバーが非表示になって表示されるときにコンテンツのサイズが変更されません。これを行うには、SYSTEM_UI_FLAG_LAYOUT_FULLSCREENを使用します。アプリが安定したレイアウトを維持できるようにするには、SYSTEM_UI_FLAG_LAYOUT_STABLEを使用する必要がある場合もあります。

このアプローチを使用する場合、アプリのUIの重要な部分(マップアプリケーションの組み込みコントロールなど)がシステムバーで覆われないようにするのは、ユーザーの責任になります。これにより、アプリが使用できなくなる可能性があります。ほとんどの場合、これを処理するには、android:fitsSystemWindows属性をXMLレイアウトファイルに追加し、trueに設定します。これにより、親ViewGroupのパディングが調整され、システムウィンドウ用のスペースが確保されます。ほとんどのアプリケーションではこれで十分です。

ただし、アプリの目的のレイアウトを取得するために、デフォルトのパディングを変更する必要がある場合もあります。システムバー(ウィンドウの「コンテンツインセット」と呼ばれるスペースを占める)を基準にしてコンテンツのレイアウトを直接操作するには、fitSystemWindows(Rect insets)をオーバーライドします。ウィンドウのコンテンツインセットが変更されたときにビューの階層によってfitSystemWindows()メソッドが呼び出され、ウィンドウがそれに応じてコンテンツを調整できるようになります。このメソッドをオーバーライドすることで、インセット(およびアプリのレイアウト)を必要に応じて処理できます。

フォーム:https : //developer.android.com/training/system-ui/status.html#behind


1

サイズと高さを正確に知っている場合

お気に入り

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

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


私の経験では、高さは画面サイズではなく密度に基づいているようです。もちろん、密度自体は通常、画面サイズに関連しているため、間接的な関係があります。たとえば、私の古いMoto Droidには480x800ではなく480x854のディスプレイがあり、ステータスバーの高さも38ピクセルです。
12年

彼らはこのためにdpを発明しました(密度非依存ピクセル)
Roel

1

トップ回答が一部の人にとってうまくいかない理由は、レンダリングの準備ができるまでビューのサイズを取得できないためです。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
        }
    }
}

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


1
@androiddeveloper OnGlobal!= GlobalOn
marijnz0r

@ marijnz0r奇妙です。どうしたの?
Android開発者

@androiddeveloperわかりませんが、たまたま数日前と同じように思いました。参照:stackoverflow.com/a/19216041/4587214
marijnz0r

@ marijnz0rしたがって、両方とも同じことを行います。他のケースを思い出して、すでに存在するものに新しい名前を付け、以前のものを非推奨にした。: "match_parent"対例"fill_parent" developer.android.com/reference/android/view/...
Androidデベロッパー

1

現在マルチウィンドウモードが利用可能であるため、アプリの上部にステータスバーがない場合があります。

以下のソリューションは、すべてのケースを自動的に処理します。

android:fitsSystemWindows="true"

またはプログラム的に

findViewById(R.id.your_root_view).setFitsSystemWindows(true);

ルートビューを取得することもできます

findViewById(android.R.id.content).getRootView();
or
getWindow().getDecorView().findViewById(android.R.id.content)

ルートビューの取得の詳細については、https://stackoverflow.com/a/4488149/9640177を参照してください


0

この問題は、Pixel 3XLにノッチがあるため、最近私に関連するものになりました。私はAndroid開発者のソリューションが本当に好きでしたが、再生する必要のあるフルスクリーンアニメーションには特に必要だったので、ステータスバーの高さを自由に取得できるようにしたいと考えました。以下の関数により、信頼性の高いクエリが有効になりました。

private val DEFAULT_INSET = 96
fun getInsets(view: View?): Int {
     var inset = DEFAULT_INSET
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//Safe because only P supports notches
          inset = view?.rootWindowInsets?.stableInsetTop ?: DEFAULT_INSET
     }
     return inset
}

fun blurView(rootView: View?, a: SpacesActivity?) {
    val screenBitmap = getBitmapFromView(rootView!!)
    val heightDifference = getInsets(rootView)
    val croppedMap = Bitmap.createBitmap(
                    screenBitmap, 0, heightDifference,
                    screenBitmap.width,
                    screenBitmap.height - heightDifference)
    val blurredScreen = blurBitmap(croppedMap)
    if (blurredScreen != null) {
         val myDrawable = BitmapDrawable(a!!.resources, blurredScreen)
         a.errorHudFrameLayout?.background = myDrawable
         a.appBarLayout?.visibility = View.INVISIBLE
   }
}

そしてアクティビティクラスで:

fun blurView() {
    this.runOnUiThread {
        Helper.blurView(this)
    }
}

もちろん、アクティビティの弱い参照を静的なHelperクラスのメソッドパラメータに渡したいと思うでしょうが、簡潔にするために、この例では控えました。blurBitmapそしてerrorHudFrameLayoutそれらは直接、ステータスバーの高さを得ることに関係しないので、同じ理由のために省略されています。


Android P以上の場合は、Android Mで確認してください。また、Viewインスタンスがない場合はどうしますか?たとえば、現在アクティビティがない場合...
android developer

Mは、stableInsetTopを確認できる最も早い時期です。Pでサポートされているノッチだけが実際のインセットを取得したい場合でも、デフォルトの設定に戻すのではなく、可能です。アクティビティがない場合、このソリューションは機能しません。
James Jordan Taylor

そうですか。ありがとうございました。もっと「完全な」例を見せていただけますか?
Android開発者

上記の回答を例でメソッドを使用するように変更しました。
ジェームズジョーダンテイラー

0

2つの最適なソリューションを組み合わせたKotlinバージョン

fun getStatusBarHeight(): Int {
    val resourceId = resources.getIdentifier("status_bar_height", "dimen", "android")
    return if (resourceId > 0) resources.getDimensionPixelSize(resourceId)
    else Rect().apply { window.decorView.getWindowVisibleDisplayFrame(this) }.top
}
  1. status_bar_height存在する場合は値を取ります
  2. status_bar_height存在しない場合、ウィンドウ装飾からステータスバーの高さを計算します
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.