3

アクションバー (ABS ではなく元の Android) を使用し、ビューをルートレイアウト ( RelativeLayout) に相対的に配置します。画面上の相対位置を計算するために、ビューのgetParent().getHeight()/getParent().getWidth()メソッドを使用しました。通常の ActionBar では正常に動作します。親の実際の高さを取得します (アクティビティの高さ - アクションバーの高さ、たとえば 800px ディスプレイで 690px)。しかし、splitActionBarWhenNarrowオプションを使用し、下部のバーが表示されている場合、親と同じ高さになります (たとえば、800 ピクセルの画面で再び 690 ピクセル)。したがって、プログラムで配置された Vie の一部は、下部のアクション バーの下にあります。

アクションバーなしで親の実際の高さを取得するにはどうすればよいですか?

編集:

onWindowFocusChangedアクティビティのメソッドで親の幅と高さを読み取ります。

4

2 に答える 2

5

上下のアクションバーは同じ高さです。私の知る限り、プログラムでアクション バーのサイズを要求することはできません。 この投稿では、スタイルを使用してアクション バーの高さを設定し、一貫性を保つ方法の例を示します。

アクション バーが分割されているかどうかを判断するには、これを手動で計算する必要があります。設計ガイドラインに従って(下部付近)

メイン アクション バーに収まるアクションの数は? アクション バーの容量は、次のルールによって制御されます。

  • メイン アクション バーのアクション ボタンは、バーの幅の 50% を超えて占めることはできません。下部アクション バーのアクション ボタンは、幅全体を使用できます。

  • 密度に依存しないピクセル (dp) 単位の画面幅によって、メイン アクション バーに収まるアイテムの数が決まります。

  • 360 dp 未満 = 2 アイコン

  • 360~499 dp = 3 アイコン

  • 500~599 dp = 4 アイコン

  • 600 dp 以上 = 5 アイコン

例: 例の表

だからあなたはこのようなことをしたいです。

DisplayMetrics displayMetrics = new DisplayMetrics();
Display display = getWindowManager().getDefaultDisplay();
display.getMetrics(displayMetrics);

float density  = displayMetrics.density;
// width in dp
float width = (displayMetrics.widthPixels / density);

// I will assume you have 3 action bar icons

if (width < 360) {
    // 2 menu items fit.
    // Calculate action bar height with 2*(actionbar height)
    // to accommodate the bottom action bar.

} else {
    // 3+ menu items fit
    // Calculate action bar height with 1*(actionbar height).
}
于 2013-04-19T18:23:06.227 に答える
3

アクションバーが分割されているかどうかをどのように検出できますか?

単純。ブール値を使用します。デフォルトでは、画面幅が 400 dp より小さい場合、ActionBar が分割されます。すでに 1 つ宣言されています (これは、ハンドセット デバイスかタブレットかを判断するために ActionBar が使用するものです)。android.R.bool.split_action_bar_is_narrowAndroid HC+ をターゲットにしている場合は、ActionBarSherlock: を使用している場合は 、デフォルトの ActionBars 値: にアクセスできます R.bool.abs_split_action_bar_is_narrow。デフォルトの ActionBar はここあり、ABS はここにあります

これで、次のようにブール値にアクセスできます。

boolean isActionBarSplitted = getResources().getBoolean(R.bool.split_action_bar);
if(isActionBarSplitted){
      // Parent height - SplitActionBar height
}
else{
     // No Split ActionBar
}

これは内部リソースであるため、ここでandroid.R.bool.split_action_bar_is_narrow説明されているように機能させる必要があることに注意してください。

于 2013-04-19T18:28:01.163 に答える