Android 2.2+ と互換性が必要なアプリケーションを開発しています。これは、ActionBarSherlock を使用して、ICS 以前のデバイスで ActionBar をカスタマイズしています。
2.2 および 2.3 デバイスでのみ、コンテンツがデバイスの画面に収まる場合でも、ActionBar のコンテンツがオーバーフローするという問題に直面しています。このようなもの:
Android 4.0 を実行しているデバイスの画面サイズ (320x480 の mdpi) を (エミュレーターで) 既にテストしましたが、問題なく動作するので、問題は ActionBarSherlock に関連していると思います。
また、アイコン ファイルを大幅に削減しようとしましたが、画像が小さくなったにもかかわらず、コンテンツはまだあふれていました。
ここに私のstyles.xmlファイルがあります:
<style name="AppBaseTheme" parent="Theme.Sherlock.Light.DarkActionBar">
</style>
<style name="AppTheme" parent="AppBaseTheme">
<item name="actionBarStyle">@style/AppBaseTheme.ActionBarStyle</item>
<item name="actionBarTabStyle">@style/AppBaseTheme.ActionBarTabStyle</item>
<item name="actionBarTabBarStyle">@style/AppBaseTheme.ActionBarTabBarStyle</item>
</style>
<style name="AppBaseTheme.ActionBarStyle" parent="Widget.Sherlock.Light.ActionBar.Solid.Inverse">
<item name="background">@drawable/action_bar_background</item>
<item name="android:background">@drawable/action_bar_background</item>
</style>
<style name="AppBaseTheme.ActionBarTabStyle" parent="Widget.Sherlock.Light.ActionBar.TabView.Inverse">
<item name="background">@android:color/transparent</item>
<item name="android:background">@android:color/transparent</item>
<item name="android:paddingLeft">0dip</item>
<item name="android:paddingRight">0dip</item>
</style>
<style name="AppBaseTheme.ActionBarTabBarStyle" parent="Widget.Sherlock.Light.ActionBar.TabBar.Inverse">
<item name="background">@drawable/action_bar_tab_divider</item>
<item name="android:background">@drawable/action_bar_tab_divider</item>
<item name="divider">@drawable/sp</item>
<item name="android:divider">@drawable/sp</item>
</style>
ファイル @drawable/action_bar_background は幅 320px で、@drawable/action_bar_tab_divider と @drawable/sp は両方とも幅 1px です。
そして、これが私のメインアクティビティでタブを作成するためのコードです:
ActionBar actionBar = super.getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
this.createTab(actionBar, R.drawable.action_bar_tab_home_off);
this.createTab(actionBar, R.drawable.action_bar_tab_news_off);
this.createTab(actionBar, R.drawable.action_bar_tab_videos_off);
this.createTab(actionBar, R.drawable.action_bar_tab_guide_off);
private void createTab(ActionBar actionBar, int resource) {
Tab t = actionBar.newTab();
t.setTabListener(this);
t.setIcon(resource);
actionBar.addTab(t);
}
何か案は?