ActionBarのピクセル単位のサイズはどれくらいですか?


回答:


558

XMLでActionBarの高さを取得するには、次のコードを使用します。

?android:attr/actionBarSize

または、ActionBarSherlockまたはAppCompatユーザーの場合は、これを使用します

?attr/actionBarSize

実行時にこの値が必要な場合は、これを使用します

final TypedArray styledAttributes = getContext().getTheme().obtainStyledAttributes(
                    new int[] { android.R.attr.actionBarSize });
mActionBarSize = (int) styledAttributes.getDimension(0, 0);
styledAttributes.recycle();

これが定義されている場所を理解する必要がある場合:

  1. 属性名自体は、プラットフォームの/res/values/attrs.xmlで定義されています
  2. プラットフォームのthemes.xmlはこの属性を選択し、それに値を割り当てます。
  3. 手順2で割り当てられる値は、プラットフォームのさまざまなdimens.xmlファイルで定義されているさまざまなデバイスサイズによって異なりますcore / res / res / values-sw600dp / dimens.xml

7
すばらしい答えです。私はこの情報を掘る方法を知っていますが、この答えを検索する方がはるかに高速でした+1。あなたの答えは、そのようなものを検索する方法の素晴らしいヒントにもなります。
2013

1
ありがとうございました。私は@dimen/abc_action_bar_default_height直接(ActionBarComapt)を使用しようとしましたが、(mdpiデバイスで)機能しました。しかし、Samsung Galaxy SIIIでこの値を取得しようとすると、間違った値が返されました。これは、values-xlarge(なんとかして)values-land横向きモードよりも好ましいからです。代わりに属性を参照すると、魅力のように機能します。
Alex Semeniuk 2014年

4
@ AZ13 android.R.attr.actionBarSize3.0より前のデバイスで0サイズに解決されるように追加したいと思います。したがって、ActionBarCompat1つを使用すると、android.support.v7.appcompat.R.attr.actionBarSize代わりに固執します。
2014

1
男はピクセルでそれを尋ねました。actionBarSizeがdp値を返すと思います。値は48 dpです。つまり、ピクセルに変換すると、xhdpiに96ピクセルが与えられます。
ムハンマド

「android.R.attr.actionBarSize」はAndroidバージョン2.3では機能しませんが、「R.attr.actionBarSize」はすべてのバージョンのAndroidで機能します。だけではなく、「android.R.attr.actionBarSize」の「R.attr.actionBarSize」となどを使用
ナサニエル・ジョブズ

59

Android 3.2の逆コンパイルされたソースからframework-res.apk、以下をres/values/styles.xml含みます:

<style name="Theme.Holo">
    <!-- ... -->
    <item name="actionBarSize">56.0dip</item>
    <!-- ... -->
</style>

3.0と3.1は同じようです(少なくともAOSPから)...


1
横長のアクションバーの高さの違いはどうですか?
Manfred Moser

86
4.0以降:デフォルトは48 dp、横長は40 dp、sw600 dpは56 dp
ジェイクウォートン

19
これが、ハードコードされた値ではなくandroid:attr値を使用する必要がある理由です。
Vikram Bodicherla 2013

45

アクションバーの実際の高さを取得するにはactionBarSize、実行時に属性を解決する必要があります。

TypedValue tv = new TypedValue();
context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true);
int actionBarHeight = getResources().getDimensionPixelSize(tv.resourceId);

33

Honeycombサンプルの1つは、 ?android:attr/actionBarSize



3
これは、最小sdkが> 11の場合の答えで、最小が<11の場合、ABSを使用している可能性が高いため、これが解決策です。@ dimen / abs__action_bar_default_height
Adam

9
ABSには?attr/actionBarSize、すべてのAPIレベルで機能する(android名前空間がないことに注意)。
Jake Wharton、2013

21

これらの高さをICS以前の互換性アプリで適切に複製し、フレームワークのコアソースを掘り下げる必要がありました。上記の両方の答えは、ある程度正しいです。

基本的には、修飾子を使用することになります。高さは、ディメンション "action_bar_default_height"によって定義されます

デフォルトでは48dipに定義されています。ただし、-landの場合は40dip、sw600dpの場合は56dipです。



16

新しいv7サポートライブラリ(21.0.0)では、名前が@ dimen / abc_action_bar_default_height_ materialにR.dimen変更されました。

以前のバージョンのサポートライブラリからアップグレードする場合は、アクションバーの高さとしてその値を使用する必要があります


1
パーフェクト!これ?attr/actionBarSizeは、通常のものと一致するように見ている場合は確かに勝りActionBarます。
karllindmark 2014年

9

ActionBarSherlockを使用している場合、高さを取得できます

@dimen/abs__action_bar_default_height

abs__-prefixedリソースを直接使用しないでください。
Jake Wharton

2
代わりに、@ JakeWhartonが正しい方法を教えてください。
JesperB 2014

独自のディメンションを作成して、abs_に依存しないようにします。
2014年


1
public int getActionBarHeight() {
    int actionBarHeight = 0;
    TypedValue tv = new TypedValue();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv,
                true))
            actionBarHeight = TypedValue.complexToDimensionPixelSize(
                    tv.data, getResources().getDisplayMetrics());
    } else {
        actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,
                getResources().getDisplayMetrics());
    }
    return actionBarHeight;
}

0

クラスの概要は、通常、開始するには良い場所です。getHeight()メソッドで十分だと思います。

編集:

幅が必要な場合は、画面の幅にする必要があります(右?)。これ、このようにして収集できます。


2
奇妙な-getHeight()はゼロになります。
ユージーン

1
私の開発では、onResume()でゼロを返すことに気付きました。実際に必要なときにgetActionBar()。getHeight()を呼び出すHoveverは、正の> 0値を返します。
tos

@tos getHeight()の仕様は、ActionBarの現在の幅を返すと表示されています。これは、ビューの作成時におそらく0です
表示名

0

Galaxy S4で> 441dpi> 1080 x 1920> getResources()。getDimensionPixelSizeを使用してアクションバーの高さを取得する144ピクセルを取得しました。

式px = dp x(dpi / 160)を使用して、私は441dpiを使用していましたが、私のデバイスは
カテゴリ480dpiにあります。そう置くことは結果を確認します。


0

私はこの方法で自分のために行いました。このヘルパーメソッドは誰かに役立つはずです。

private static final int[] RES_IDS_ACTION_BAR_SIZE = {R.attr.actionBarSize};

/**
 * Calculates the Action Bar height in pixels.
 */
public static int calculateActionBarSize(Context context) {
    if (context == null) {
        return 0;
    }

    Resources.Theme curTheme = context.getTheme();
    if (curTheme == null) {
        return 0;
    }

    TypedArray att = curTheme.obtainStyledAttributes(RES_IDS_ACTION_BAR_SIZE);
    if (att == null) {
        return 0;
    }

    float size = att.getDimension(0, 0);
    att.recycle();
    return (int) size;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.