3

次の問題を実験しています: カスタム アクション バーを作成しました:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/com_facebook_blue" >

<TextView 
    android:id="@+id/action_bar_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:maxLines="1"
    android:layout_marginLeft="@dimen/activity_horizontal_margin"
    android:layout_centerInParent="true"
    android:textSize="30dp"
    android:textColor="#ffffff"
    android:text="@string/app_title"/>

</RelativeLayout>

次の方法で GraphicsBuilder クラスによってインフレートされます。

public static void setupActionBar(String title, Activity a) {

        final ViewGroup actionBarLayout = (ViewGroup) a.getLayoutInflater()
                .inflate(R.layout.action_bar_layout, null);
        final ActionBar actionBar = a.getActionBar();

        actionBar.setDisplayShowHomeEnabled(false);
        actionBar.setDisplayShowTitleEnabled(false);
        actionBar.setDisplayShowCustomEnabled(true);
        actionBar.setCustomView(actionBarLayout);
        final int actionBarColor = a.getResources().getColor(R.color.main_red);
        actionBar.setBackgroundDrawable(new ColorDrawable(actionBarColor));

        TextView tv = (TextView) actionBarLayout.findViewById(R.id.action_bar_title);
        Typeface font = Typeface.createFromAsset(a.getAssets(), "fonts/Molle-Regular.ttf");
        tv.setText(title);
        tv.setTypeface(font);
    }

これにより、次の結果が得られます (問題を強調するために、タイトル バーの背景を青色のままにしています)。

ここに画像の説明を入力

基本的に、カスタム アクション バーが親の幅を埋めていないように見えるため、タイトルを中央に揃えようとしても無駄です。どうすればこれを修正できますか?

4

1 に答える 1

10

私はこれが長い間なくなっていることを知っています。カスタムビューとして設定したら、レイアウトパラメータを変更することで解決しました。

私の論理では、最初に膨らませると、元のコンテナーのサイズが想定されます。電話すると:

actionBar.setCustomView(titlebar);

すでに寸法がプリセットされています。私の解決策は次のとおりです。

View titlebar = inflater.inflate(R.layout.titlebar, null);

// Do stuff to Title Bar //

ActionBar actionBar = getActionBar();
actionBar.setCustomView(titlebar);
View v = actionBar.getCustomView();
LayoutParams lp = v.getLayoutParams();
lp.width = LayoutParams.MATCH_PARENT;
v.setLayoutParams(lp);

または、最初にインフレータなしでアクション バーのレイアウトを設定することもできます。

ActionBar actionBar = getActionBar();
actionBar.setCustomView(R.id.titlebar);
View v = actionBar.getCustomView();
// Do something to the view  E.g Set button listeners blah //

// Rest of code
于 2014-07-02T08:08:14.753 に答える