액션바의 크기는 픽셀 단위로 어떻게 됩니까?
정확한 배경 이미지를 적용하기 위해서는 픽셀 단위의 ActionBar의 정확한 크기를 알아야 합니다.
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();
이 정의 위치를 이해해야 하는 경우:
- 속성 이름 자체가 플랫폼의 /res/values/attrs.xml에 정의되어 있습니다.
- 플랫폼의 테마.xml은 이 특성을 선택하고 값을 할당합니다.
- 2단계에서 할당되는 값은 플랫폼의 다양한 dimens.xml 파일, 즉 core/res/res/values-sw600dp/dimens.xml에 정의된 다양한 디바이스 크기에 따라 달라집니다.
안드로이드 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에서) 동일한 것 같습니다.
Actionbar의 실제 높이를 얻으려면 속성을 확인해야 합니다.actionBarSize
해질녘에
TypedValue tv = new TypedValue();
context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true);
int actionBarHeight = getResources().getDimensionPixelSize(tv.resourceId);
Honeycomb 샘플 중 하나는 다음과 같습니다.?android:attr/actionBarSize
ICS 이전 호환 앱에서 이러한 높이를 적절히 복제하고 프레임워크 코어 소스를 조사해야 했습니다.위의 두 답변 모두 다소 맞습니다.
그것은 기본적으로 예선전을 사용하는 것으로 요약됩니다.높이는 "action_bar_default_height" 차원으로 정의됩니다.
기본값의 경우 48dip으로 정의됩니다.그러나 육지의 경우 40 dip이고 sw600 dp의 경우 56 dip입니다.
최근 v7 app compat 지원 패키지의 호환성 ActionBar를 사용하는 경우 다음을 사용하여 높이를 얻을 수 있습니다.
@dimen/abc_action_bar_default_height
새 v7 지원 라이브러리(21.0.0)를 사용하면 이름이R.dimen
@dimen/dimens_action_bar_default_height_material로 변경되었습니다.
이전 버전의 support lib에서 업그레이드할 때는 이 값을 작업 표시줄의 높이로 사용해야 합니다.
ActionBarSherlock을 사용하는 경우 다음과 같이 높이를 얻을 수 있습니다.
@dimen/abs__action_bar_default_height
@AZ13의 답변은 좋으나 Android 설계 지침에 따르면 ActionBar는 48dp 이상이어야 합니다.
Kotlin에서 수락된 답변:
val Context.actionBarSize
get() = theme.obtainStyledAttributes(intArrayOf(android.R.attr.actionBarSize))
.let { attrs -> attrs.getDimension(0, 0F).toInt().also { attrs.recycle() } }
용도:
val size = actionBarSize // Inside Activity
val size = requireContext().actionBarSize // Inside Fragment
val size = anyView.context.actionBarSize // Inside RecyclerView ViewHolder
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;
}
클래스 요약은 일반적으로 시작하기에 좋습니다.getHeight() 방법으로 충분하다고 생각합니다.
편집:
폭이 필요하시면 화면의 폭(맞습니까?)이 되어야 하고, 이렇게 모이면 됩니다.
441dpi > 1080 x 1920 > getResources()로 액션바 높이 얻기. getDimensionPixelSize 144픽셀을 받았습니다.
px x (를 는 formula px dp x (dpi/160) 를 하여 한 441dpi 하지 는 를 하지 는 한 하여
480dpi 카테고리에서. 됩니다.그래서 퍼팅을 하면 결과가 확인됩니다.
저는 제 자신을 위해 이 방법을 사용했는데, 이 도우미 방법은 누군가에게 도움이 될 것입니다.
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;
}
언급URL : https://stackoverflow.com/questions/7165830/what-is-the-size-of-actionbar-in-pixels
'programing' 카테고리의 다른 글
python에서 numpy.linalg를 사용한 후 고유값 및 관련 고유 벡터 정렬 (0) | 2023.09.13 |
---|---|
How to make an element in XML schema optional? (0) | 2023.09.13 |
Wordpress 플러그인 설치 실패 (0) | 2023.09.13 |
마리아DB는 키 길이 없이 BLOB 열에 색인을 작성할 수 있습니까? (0) | 2023.09.13 |
.htaccess, mod_https 및 기본 인증 (0) | 2023.09.13 |