9

私はMapViewActionBarSherlock を搭載したアクション バーを持っています。アクション バーは、分割 (「狭い」画面の場合) とオーバーレイ/半透明 (android:windowActionBarOverlay が true) の両方です。多かれ少なかれGoogleマップアプリに似ています。

ここで、ビューをマップの上部にプッシュし、画面の下部に、下部のアクション バーの上に表示したままにします。ここでの問題は、下部のアクション バーの高さが分からないことです。率直に言って、それが描かれているかどうかを知る方法さえ見つけられません。getHeight()上部のアクション バーの高さを返すようです (または、両方の高さかもしれませんが、下部のアクション バーが存在するかどうかはまだわかりません。

この情報が目の前にあると教えてください!

4

3 に答える 3

5

ActionBarSherlock を使用している場合は、ブール値 abs__split_action_bar_is_narrow を探すことができます

できる静的メソッドを作成するだけです

return ResourcesCompat.getResources_getBoolean(context,
                            R.bool.abs__split_action_bar_is_narrow);

3.2 より前のバージョンではメトリック (values-sw480 など) を含むフォルダーを読み取れないため、ResourcesCompat (actionbarsherlock から) クラスを使用する必要があります。

于 2013-01-18T23:17:10.613 に答える
3

私は同じ問題に遭遇しました。ポートレートモードの電話デバイスでは、アクションバーが分割されます。したがって、メニュー項目は上部のアクションバーにあり、タブは下の2番目のアクションバー(タブバー)にあります。アクションバーの高さを判断する方法が見つかりませんでした。画面を作成する前に、画面に残っているスペースを確認してください。

だから私は仮定をしました:

  • 小型で通常の画面サイズのデバイスでは、アクションバーはポートレートモードで分割されます
  • 大画面サイズのデバイス(Nexus 7など)では、アクションバーもポートレートモードで分割されます
  • xlarge画面サイズのデバイス(タブレット)では、アクションバーはポートレートモードで分割されません

そこで、さまざまな画面サイズを区別して、boolリソースを作成しました

<!-- res/values/booleans.xml -->
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="is_split_actionbar">false</bool>
</resources>

<!-- res/values-small-port/booleans.xml
     res/values-normal-port/booleans.xml
     res/values-large-port/booleans.xml -->
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="is_split_actionbar">true</bool>
</resources>

コードでは、次のような値にアクセスします。

Boolean isSplit = getResources().getBoolean(R.bool.is_split_actionbar);

onCreateView()メソッドでアクションバーの高さを取得するには:

TypedValue typedVal = new TypedValue();
getActivity().getTheme().resolveAttribute(R.attr.actionBarSize, typedVal, true); // use android.R when not using ABS
int actionBarHeight = getResources().getDimensionPixelSize(typedVal.resourceId);

アクションバーが分割されている場合は、高さを2倍にします。

if(isSplit) 
    actionBarHeight = actionBarHeight * 2;

これは理想的な解決策ではありませんが、私にとってはこれでうまくいきます。

于 2012-11-09T08:09:57.137 に答える
2

下部のバーは、通常のアクション バーの高さと一致する必要があります。したがって、XML またはコードでの高さの使用?android:attr/actionBarSize(または ActionBarSherlock の場合) で十分です。?attr/actionBarSizegetResources().getDimensionPixelSize(R.attr.actionBarSize)

編集:

ええと、あなたの質問を 2 度目に読むと、分割アクション バーが存在するかどうかを判断することにも重点が置かれているようです。

これらの回答と、アクション バーの第一人者である Adam Powell によるフォローアップ コメントをお読みになることをお勧めします。

于 2012-04-16T04:19:23.293 に答える