web-dev-qa-db-ja.com

ActionBarロゴを中央に配置し、側面にアクションアイテムを配置

このようにロゴを中央に配置し、2つのアクションアイテムをサイドに配置するアクションバーを作成するにはどうすればよいですか?

enter image description here

I will be using ActionBar Sherlock.

34
urSus

コメントで述べたように、ABSでこれが変わるかどうかは正確にはわかりませんが(大したことはないと確信しています)、標準のアクションバーでは、アクションバータイトルのカスタムレイアウト.xmlをロードできます。たとえば、action_bar_title.xmlを使用できます。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:background="@drawable/your_desired_background" >

<TextView
        Android:id="@+id/title"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_centerInParent="true"
            Android:maxLines="1"
            Android:ellipsize="end"
            Android:text="@string/app_name"
            Android:textAppearance="?android:attr/textAppearanceMedium"/>

</RelativeLayout>

次に、アクティビティで、onCreate()で次のようなメソッドを呼び出します。

private void setupActionBar() {
        ActionBar ab = getActionBar();
        ab.setDisplayShowCustomEnabled(true);
        ab.setDisplayShowTitleEnabled(false);
        ab.setIcon(R.drawable.your_left_action_icon);
        LayoutInflater inflator = (LayoutInflater) this
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = inflator.inflate(R.layout.action_bar_title, null);

        TextView titleTV = (TextView) v.findViewById(R.id.title);
        Typeface font = Typeface.createFromAsset(getAssets(),
                "fonts/your_custom_font.ttf");
        titleTV.setTypeface(font);

        ab.setCustomView(v);

            ab.setHomeAsUpEnabled(true);
    }

左側のアクションアイテムを制御するには、アクティビティでこれを行うことができます。

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.yourRightActionItem:
                        //do something
                        return true;
        case Android.R.id.home: //<-- this will be your left action item
            // do something
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

もちろん、メニューxmlのアクションアイテムに対して他の必要な設定も行うようにしてください。これは、右側のアクション項目用です。

編集:別のコメントで、タイトルが画像になると言ったところを見ました。その場合は、例で使用したTextViewをImageViewに置き換え、setupActionBar()メソッドのフォントカスタマイズコードを無視してください。

Edit2:Javaコードを更新しました。ab.setHomeAsUpEnabled(true)を実行する必要があり、カスタムテーマを使用して非表示(またはおそらくわからないが@nullを実装する必要があります) if Androidはそれを受け入れます)家のためのドロアブルをアップインジケータとして。ここを参照してください(回答から here :)

<style name="Theme.MyFancyTheme" parent="Android:Theme.Holo">
    <item name="Android:homeAsUpIndicator">@drawable/my_fancy_up_indicator</item>
    <!-- or you could try @null -->
</style>
40
dennisdrew