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
좋은 대답입니다. 나는이 정보를 파는 방법을 알고 있지만이 답변을 검색하는 것이 훨씬 빠릅니다. 귀하의 답변은 또한 그러한 것들을 검색하는 방법에 대한 좋은 힌트입니다.
— 14:35에

1
감사합니다. @dimen/abc_action_bar_default_height직접 사용하려고 시도했지만 (ActionBarComapt) (mdpi 장치에서) 작동했습니다. 그러나 Samsung Galaxy SIII 에서이 값을 얻으려고하면 잘못된 값이 반환되었습니다. 가로 모드 values-xlarge보다 (어떻게)가 더 선호 되기 때문 values-land입니다. 대신 속성을 참조하면 매력처럼 작동합니다.
— Alex Semeniuk

4
@ AZ13 android.R.attr.actionBarSize3.0 이전 장치에서는 0 크기로 확인 되는 추가하고 싶습니다 . 따라서 ActionBarCompat하나 를 사용할 때 android.support.v7.appcompat.R.attr.actionBarSize대신 붙어 있습니다.
— Drew

1
그 남자는 픽셀로 물었다. actionBarSize가 dp 값을 반환한다고 가정합니다. 나는 48dp의 가치를 얻었다. 즉, 픽셀로 변환하면 xhdpi에 96 픽셀이 제공됩니다.
— 무하마드

"android.R.attr.actionBarSize"는 Android 버전 2.3에서 작동하지 않지만 "R.attr.actionBarSize"는 Android 모든 버전에서 작동합니다. "android.R.attr.actionBarSize"등 대신 "R.attr.actionBarSize"를 사용하십시오.
— Nathaniel Jobs

59

안드로이드 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+에서 : 기본값은 48dp, 가로는 40dp, sw600dp는 56dp
— Jake Wharton

19
그렇기 때문에 하드 코딩 된 값이 아닌 android : attr 값을 사용해야합니다!
— Vikram Bodicherla

45

작업 표시 줄의 실제 높이를 얻으려면 actionBarSize런타임에 속성을 해결해야합니다 .

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

33

허니컴 샘플 중 하나는 ?android:attr/actionBarSize


3
예, 여기에 설명되어 있습니다 : developer.android.com/guide/topics/ui/…
— Pointer Null

3
이것은 min sdk가> = 11 인 경우의 대답입니다. min이 <11 인 경우 ABS를 사용하고있을 가능성이 가장 높습니다. @ dimen / abs__action_bar_default_height
— Adam

9
ABS에는 ?attr/actionBarSize모든 API 수준에서 작동하는 (Android 네임 스페이스가 없음을 유의하십시오).
— Jake Wharton

21

사전 ICS 호환성 앱에서 이러한 높이를 올바르게 복제하고 프레임 워크 코어 소스를 파헤쳐 야했습니다 . 위의 두 대답은 정확합니다.

기본적으로 한정자를 사용하는 것으로 요약됩니다. 높이는 "action_bar_default_height"차원으로 정의됩니다.

기본적으로 48dip로 정의되어 있습니다. 그러나 -land의 경우 40dip이고 sw600dp의 경우 56dip입니다.




9

ActionBarSherlock을 사용하는 경우 높이를 얻을 수 있습니다.

@dimen/abs__action_bar_default_height

abs__접두사가 붙은 리소스를 직접 사용하지 마십시오 .
— Jake Wharton

2
@JakeWharton 그 대신 올바르게 수행하는 방법을 알려주십시오.
— JesperB

abs_에 의존하지 않도록 자신의 차원을 만듭니다.
— Codeversed


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 () 결과는 0입니다.
— Eugene

1
내 개발에서 onResume ()에서 0을 반환한다는 것을 알았습니다. 실제로 필요할 때 getActionBar (). getHeight ()를 호출하는 Hovever는 양수> 0 값을 반환합니다.
— tos

@gets getHeight ()에 대한 사양은 ActionBar의 현재 너비를 반환한다고 말합니다.보기를 만들 때 아마도 0 일 것입니다.
— 표시 이름

0

> 441dpi> 1080 x 1920> getResources (). getDimensionPixelSize를 사용하여 작업 표시 줄 높이 얻기 갤럭시 S4에서 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.