ActionBar徽标居中,两侧是Action项目

时间:2012-10-05 16:05:16

标签: android android-actionbar center graphical-logo

我怎样才能让操作栏在中心放置徽标,在这两侧设置两个动作项?

enter image description here

我将使用ActionBar Sherlock。

1 个答案:

答案 0 :(得分:40)

正如我在评论中所指出的,我不确定这是否会因为ABS而改变(我肯定不会太多),但使用标准的Action Bar,您可以为您的操作加载自定义布局.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>

然后,在你的Activity中,你想要在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虽然我不知道Android是否会接受它)drawable for home作为向上指示器。见这里(摘自答案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>