каков размер actionbar в пикселях?

<p>мне нужно знать точный размер actionbar в пикселях, чтобы применить правильное фоновое изображение.</p>

<p>чтобы получить высоту actionbar в xml, просто используйте</p><pre><code>?android:attr/actionbarsize </code></pre><p>или если вы пользователь actionbarsherlock или appcompat, используйте это</p><pre><code>?attr/actionbarsize </code></pre><p>если вам нужно это значение во время выполнения, используйте это</p><pre><code>final typedarray styledattributes = getcontext().gettheme().obtainstyledattributes( new int[] { android.r.attr.actionbarsize }); mactionbarsize = (int) styledattributes.getdimension(0, 0); styledattributes.recycle(); </code></pre><p>если вам нужно понять, где это определяется:</p><ol> <li>само имя атрибута определено в платформе <a href="https://github.com/android/platform\_frameworks\_base/blob/master/core/res/res/values/attrs.xml">/ res/values / attrs.xml</a> </li> <li>платформа <a href="https://github.com/android/platform\_frameworks\_base/blob/master/core/res/res/values/themes.xml">themes.xml</a> выбирает этот атрибут и присваивает ему значение.</li> <li>значение, назначенное на шаге 2, зависит от разных размеров устройства, которые определены в <a href="https://github.com/android/platform\_frameworks\_base/search?q=action\_bar\_default\_height&type=code">различные измерения. файлы xml</a> в платформе, т.е. <em> ядро / res/res/значения-sw600dp/dimens.xml </em></li> </ol>

<p>из декомпилированных источников android 3.2 <code>framework-res.apk</code>, <code>res/values/styles.xml</code> содержит:</p><pre><code><style name="theme.holo"> <!-- ... --> <item name="actionbarsize">56.0dip</item> <!-- ... --> </style> </code></pre><p>3.0 и 3.1 вроде бы одинаковые (по крайней мере из aosp) ...</p>

<p>чтобы получить фактическую высоту панели действий, необходимо разрешить атрибут <code>actionbarsize</code> во время выполнения.</p><pre><code>typedvalue tv = new typedvalue(); context.gettheme().resolveattribute(android.r.attr.actionbarsize, tv, true); int actionbarheight = getresources().getdimensionpixelsize(tv.resourceid); </code></pre>

<p>один из образцов honeycomb относится к <code>?android:attr/actionbarsize</code></p>

<p>мне нужно было правильно реплицировать эти высоты в приложении совместимости до ics и копаться в <a href="https://github.com/android/platform\_frameworks\_base/tree/master/core/res/res">основной источник фреймворка</a> . оба ответа выше верны.</p><p>это в основном сводится к использованию квалификаторов. высота определяется измерением "action\_bar\_default\_height"</p><p>по умолчанию это 48dip. но для -land это 40dip, а для sw600dp - 56dip.</p>

<p>если вы используете actionbar совместимости из недавнего пакета поддержки app7 v7, вы можете получить высоту, используя</p><pre><code>@dimen/abc\_action\_bar\_default\_height </code></pre><p> <a href="https://developer.android.com/reference/android/support/v7/appcompat/r.dimen.html">документация</a> </p>

<p>с новым <a href="https://developer.android.com/intl/es/reference/android/support/v7/appcompat/package-summary.html">поддержка библиотеки v7</a> (21.0.0) имя в <code>r.dimen</code> изменилось на <a href="https://developer.android.com/reference/android/support/v7/appcompat/r.dimen.html#abc\_action\_bar\_default\_height\_material">@ dimen/abc\_action\_bar\_default\_height \_ <strong> материал </strong></a> .</p><p>поэтому при обновлении с предыдущей версии библиотеки поддержки следует использовать это значение в качестве высоты панели действий.</p>

<p>если вы используете actionbarsherlock, вы можете получить высоту с</p><pre><code>@dimen/abs\_\_action\_bar\_default\_height </code></pre>

<p>@ ответ az13 хороший, но в соответствии с <a href="http://developer.android.com/design/index.html">рекомендации по разработке android</a> , actionbar должен быть <a href="http://developer.android.com/design/style/metrics-grids.html#examples">минимум 48dp</a> .</p>

<p>на моем galaxy s4, имеющем> 441 точек на дюйм> 1080 x 1920> получение высоты actionbar с помощью getresources (). getdimensionpixelsize я получил 144 пикселя.</p><p>используя формулу px = dp x (dpi/160), я использовал 441dpi, тогда как мое устройство лежит<br> в категории 480dpi. так что это подтверждает результат.</p>

<p> <a href="http://developer.android.com/reference/android/app/actionbar.html">сводка класса</a> обычно является хорошим местом для начала. я думаю, что метод getheight () должно быть достаточно.</p><p>правка:</p><p>если вам нужна ширина, она должна быть шириной экрана (верно?), и это можно собрать <a href="https://stackoverflow.com/questions/1016896/android-how-to-get-screen-dimensions">вот так</a> .</p>

<p>я сделал таким образом для себя, этот вспомогательный метод должен пригодиться кому-то:</p><pre><code>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; } </code></pre>