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.