タブナビゲーション付きのアクションバーがあります。3.1で実行している間はすべて問題ありませんでしたが、4.1デバイスにアプリをインストールすると、タブがスピナーとして表示され、レイアウトデザインが破壊されました。タブがスペースを取りすぎているようです(フラグメントの一部を削除すると、すべてが再び正常に見えます。Android3.1と同じように、この動作を停止してナビゲーションをタブとして再度表示する方法はありますか?誰か知っていますか?
ありがとう!
タブナビゲーション付きのアクションバーがあります。3.1で実行している間はすべて問題ありませんでしたが、4.1デバイスにアプリをインストールすると、タブがスピナーとして表示され、レイアウトデザインが破壊されました。タブがスペースを取りすぎているようです(フラグメントの一部を削除すると、すべてが再び正常に見えます。Android3.1と同じように、この動作を停止してナビゲーションをタブとして再度表示する方法はありますか?誰か知っていますか?
ありがとう!
ここで答えを見つけました。タブを追加した後、ナビゲーションモードを設定する必要がありました。
まず、明確にするために、これはバグではなく、意図したとおりに機能します。Googleコードフォーラムでこのディスカッションを参照してください。
しかし、私はあなたがオーバーライドすると次のような解決策に到達しました:
<bool name="abs__action_bar_embed_tabs">false</bool> //for ActionBarSherlock
<bool name="android:action_bar_embed_tabs">false</bool> //for default ActionBar
NAVIGATION_MODE_LIST
ポートレートモードにはなりません。ただし、埋め込みタブはなく、画面を横向きに回転させても機能しません。デフォルトでは、タブが埋め込まれているためNAVIGATION_MODE_LIST
、幅が480dpを超える画面に表示されます。
この動作は(私が推測する)埋め込まれたタブがActionBarの幅に制限されているために発生します。したがって、ブール値をオーバーライドすると、別の行にタブがあり、折りたたまれません。しかし、残念ながら、これが風景で機能しない理由を自分で説明することはできません。
申し訳ありませんが、これを止めることはできません。Googleによると、これはバグではなく機能です。参照:http ://code.google.com/p/android/issues/detail?id = 24439
私が理解しているように、多くのタブがあり、それらを常にスクロール可能にしたい場合は、 ViewPager+PagerTitleStripの使用を検討する必要があります。ttps://code.google.com/p/android/issues/detail?id = 24439#c9からの引用は次のとおりです。
UIに多くのタブが含まれていて、スクロールタブまたは折りたたみからスピナーへのケースを定期的にヒットする場合は、完全なタブではなく、PagerTitleStripをインジケーターとして使用して、この情報を整理して表示することを検討してください。これは、表示されるタブのセットがユーザーの制御下にある場合に特に役立ちます。クリック可能なタブは、YouTubeアプリのように、小さな境界のあるセットがある場合に最適に機能します。タブストリップをスクロールすると、どのタブにもワンタッチでアクセスできなくなります。これは、単純なタイトルストリップに比べて主な利点です。PagerTitleStripスタイルの例は、AndroidマーケットとGoogle+アプリにあります。
トリックが安定して機能することを誰も保証しないので、トリックを使用することはお勧めしません。
本当にタブを使用してスピナーに折りたたまれないようにしたい場合は、タブにcustomViewを設定している場合は、リフレクションを使用して技術的に可能です。
View v = <your custom tab view>;
Tab tab = actionBar.newTab().setCustomView(v);
do{
v = (View)v.getParent();
} while (v!=null && !v.getClass().getSimpleName().equalsIgnoreCase("ScrollingTabContainerView"));
if(v!=null) {
try {
Method allowCollapse = v.getClass().getDeclaredMethod("setAllowCollapse", new Class[] { Boolean.TYPE });
allowCollapse.setAccessible(true);
allowCollapse.invoke(v, new Object[]{ false });
} catch (Exception e) {
}
}
十分なスペースがない場合、タブはアクションバーでスクロールします。タブとメニューactionItemには画面幅の1/2が指定されているため、タブがスクロールするかどうかを計算して、タブ、メニューactionItemラベルなどを調整したり、タブを強制的にスタックモードにして、タブのスクロールを回避したりできます。 ...または、前に提案したように、代わりにPagerTitleStripを使用します。