17

ActionBarSherlockを使用していて、ナビゲーションタブが含まれるActionBarがあります。タブ内のテキストのサイズに基づいてタブのサイズを自動化したいのですが、どこかに最小サイズを使用するように強制しているスタイルまたは設定があるようです。したがって、たとえばスクリーンショットでは、タブ「Very Long Tab」には(適用したスタイルに従って)パディングがありませんが、「T」とマークされたタブには、パディングを0dpに設定したにもかかわらず、かなりのパディングがあります。

ここに画像の説明を入力してください

以下に示すように、いくつかのスタイルにさまざまな属性を設定してブルートフォースアプローチを試しましたが、まだ成功していません。

アクションバータブのパディング/幅を制御するにはどうすればよいですか?

<style
    name="CustomActivity"
    parent="@style/Theme.Sherlock"
    >
    <item name="actionBarTabStyle">@style/customActionBarTabStyle</item>
    <item name="actionBarTabBarStyle">@style/customActionBarTabBarStyle</item>
    <item name="actionBarTabTextStyle">@style/customActionBarTabTextStyle</item>
</style>

<style name="customActionBarTabStyle" parent="style/Widget.Sherlock.ActionBar.TabView">
    <item name="android:background">@drawable/tab_indicator</item>
    <item name="android:paddingLeft">0dp</item>
    <item name="android:paddingRight">0dp</item>
    <item name="android:layout_width">wrap_content</item>
    <item name="android:minWidth">0dp</item>
</style>

<style name="customActionBarTabBarStyle" parent="style/Widget.Sherlock.ActionBar.TabBar">
    <item name="android:paddingLeft">0dp</item>
    <item name="android:paddingRight">0dp</item>
    <item name="android:layout_width">wrap_content</item>
    <item name="android:minWidth">0dp</item>
</style>

<style name="customActionBarTabTextStyle" parent="style/Widget.Sherlock.ActionBar.TabText">
    <item name="android:paddingLeft">0dp</item>
    <item name="android:paddingRight">0dp</item>
    <item name="android:layout_width">wrap_content</item>
    <item name="android:minWidth">0dp</item>
</style>
4

3 に答える 3

11

そのスクリーンショットから、ICSでテストしているように見えます。これは、ActionBarSherlockのバグであると考えるのではなく、ネイティブアクションバーの動作を観察するためです。

基本的に、アクションバーは、タブが数個しかないときに見栄えを良くするために十分なスペースがある場合、タブを拡張して同じ量のスペースを占有しようとします。

パディングをゼロに設定するactionBarTabTextStyleと、実際には問題が悪化します。これは、最初のタブのテキストの周囲に、仕切りや画面の端に触れるのを防ぐものが何もないためです。パディングを増やす(またはデフォルトに戻す)と、次の2つのいずれかが表示されます。

  1. テキストは2行に折り返されます。
  2. タブバーは、タブをコンテンツと同じ幅に変換し、水平方向のスクロールを可能にします。

前者は、2番目から4番目のタブの幅が非常に薄いために発生すると思いがちです。残念ながら、これはタブバーの動作と同じであり、それに応じてその動作に対応する必要があります。

可能であれば、幅がより統一されたタブラベルを作成してみてください。これにより、上記の2番目の状態がトリガーされる可能性があります。表示されている動作がプラットフォームからのものであることを確認できるように、ICSでテストを続けてください。その後、ICSより前で実行すると、ライブラリから同じ動作が得られるはずです。

于 2012-03-16T16:46:34.907 に答える
1

ActionBarSherlockの4.0より前のAndroidモードのテーマを使用しているようですか?

http://actionbarsherlock.com/theming.htmlから:

ミラーリングされた属性

Androidのテーマシステムには制限があるため、テーマのカスタマイズは2つの属性で宣言する必要があります。通常のandroid-prefixed属性は、テーマをネイティブアクションバーに適用し、prefixedされていない属性はカスタム実装用です。両方のテーマAPIはまったく同じであるため、カスタマイズを2回実装するのではなく、2回参照するだけで済みます。

これが何を伴うかを正確に伝える最も簡単な方法は、例を使用することです。以下は、上記の「スタイル付き」の例の完全なテーマです。

<style name="Theme.Styled" parent="Theme.Sherlock.Light.DarkActionBar">
    <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
    <item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
</style>

<style name="Widget.Styled.ActionBar" parent="Widget.Sherlock.Light.ActionBar.Solid.Inverse">
    <item name="background">@drawable/bg_striped</item>
    <item name="android:background">@drawable/bg_striped</item>

    <item name="backgroundSplit">@drawable/bg_striped_split</item>
    <item name="android:backgroundSplit">@drawable/bg_striped_split</item>
</style>
于 2012-07-05T12:42:39.307 に答える
1

プロジェクトActionBarSherlock./ActionbarSherlock/src/com/actionbarsherlock/internal/widget/ScrollingTabContainerView.javaでこのクラスをオーバーライドします

 @Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
     Re-measure if we went beyond our maximum size.
    if (mParent.mMaxTabWidth > 0 && getMeasuredWidth() > mParent.mMaxTabWidth) {

      //do nothing , override by me for ActionBarTabs not rezize never

    }
}

からの元のコード

@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    // Re-measure if we went beyond our maximum size.
    if (mParent.mMaxTabWidth > 0 && getMeasuredWidth() > mParent.mMaxTabWidth) {
        super.onMeasure(MeasureSpec.makeMeasureSpec(mParent.mMaxTabWidth, MeasureSpec.EXACTLY),
                heightMeasureSpec);
    }
}

実行すると、Android 2.3.3のコードは、タブが破線でない場合は正常に機能しますが、Android4.4では機能しません。

于 2014-05-21T20:37:52.280 に答える