1

タブごとにタブスタイルを上書きして、特定のタブにエフェクトを適用し、他のタブは通常のままにしておくことを検討しています。

これが、カスタムタブに使用しているレイアウトXMLです。

<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/CustomActionBarTabTextStyle"
    android:ellipsize="end"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:gravity="center_vertical"/>

com.actionbarsherlock.internal.widget.ScrollingTabContainerView.TabViewのupdate()での実装に続いて、それに応じてレイアウトパラメータとテキスト楕円が設定されています。CustomActionBarTabTextStyleが現在オーバーライドしているのは、テキストサイズだけです。

タブは、テキストがタブ内で上揃えになっていることを除いて、カスタムビューがない場合とまったく同じようにレンダリングされます。階層ビューアですばやく実行すると、layout_gravityがNONEとして表示されているのに対し、非カスタムタブの場合はlayout_gravityはCENTER_VERTICALです。これはどのように可能ですか?誰かがこれを修正する方法がありますか?android:layout_gravity = "center_vertical"をスタイルやテーマに配置してみましたが、結果はありませんでした。

4

1 に答える 1

2

現在、実用的なソリューションがありますが、あまりきれいではありません。カスタム ビューを設定するときに、LayoutParams を明示的に作成して設定する必要があります。

tab.setCustomView(customtabviewresourceid);
TextView tv = ((TextView)tab.getCustomView());
tv.setText(tab.getText().toString().toUpperCase());
LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lp.gravity=Gravity.CENTER_VERTICAL;
tv.setLayoutParams(lp);

これが最善の方法だとは思わないので、まだ答えを探しています。理想的には、これを Java コードで行うべきではありません。

于 2013-02-28T15:25:01.253 に答える