对自定义操作栏项目进行居中

时间:2015-09-10 22:25:24

标签: android xml layout android-actionbar

我有一个自定义操作栏,其中包含两个我想要居中的项目(蓝色按钮)。目前,他们略微偏离中心。我想确保按钮以所有屏幕尺寸为中心。对我来说,最好的方法是什么?

以下是截图:

enter image description here

这是我的XML project_action_bar.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:layout_gravity="fill_horizontal"
    android:orientation="horizontal">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"
        android:layout_gravity="center"
        android:orientation="horizontal">

        <ImageButton
            android:id="@+id/list"
            android:layout_width="0.0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1.0"
            android:background="@drawable/left_rounded_rect_selected"
            android:src="@drawable/list_white"
            android:scaleType="fitCenter"
            android:adjustViewBounds="true"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp"
            />

        <ImageButton
            android:id="@+id/map"
            android:layout_width="0.0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1.0"
            android:background="@drawable/right_rounded_rect_deselected"
            android:src="@drawable/map_blue"
            android:scaleType="fitCenter"
            android:adjustViewBounds="true"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp"
             />
    </LinearLayout>

</RelativeLayout>

在我的活动中:

private void showActionBar() {
        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setDisplayShowCustomEnabled(true);
        actionBar.setDisplayShowTitleEnabled(false);      
        ActionBar.LayoutParams lp = new ActionBar.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.MATCH_PARENT);        

        View view = getLayoutInflater().inflate(R.layout.project_action_bar, null);
        actionBar.setCustomView(view, lp);

        View v = actionBar.getCustomView();
}

我还在这里添加了刷新和下拉菜单:

public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.

        menu.add(Menu.NONE, R.id.refresh, Menu.NONE, "refresh")
        .setIcon(R.drawable.ic_action_refresh)
        .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);       

        SubMenu optionsMenu = menu.addSubMenu("Options Item");
        optionsMenu.add(Menu.NONE, R.id.delete_project, Menu.NONE, "Delete Project")
        .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
        optionsMenu.add(Menu.NONE, R.id.logout, Menu.NONE, "Log Out")
        .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);        
        MenuItem optionsMenuItem = optionsMenu.getItem();

        optionsMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
        optionsMenuItem.setIcon(R.drawable.ic_action_overflow);

        return super.onCreateOptionsMenu(menu);
    }

1 个答案:

答案 0 :(得分:0)

按钮在自定义视图中居中,但自定义视图不在操作栏中居中。

自定义视图填充主页图标和菜单操作之间的空间。如果菜单操作比主页图标占用更多空间(就像在您的情况下显然那样),自定义视图将不会在操作栏中居中。

如果你真的想要实现这一点,我的建议是获得屏幕的宽度和主页图标的宽度,然后做一些数学计算,以确定左边距应该是什么,以使按钮出现居中。

您可以在某处找到样式属性中主页图标的宽度(因为宽度因屏幕大小而异)。

我不想弄明白。我只需更改按钮颜色以匹配菜单操作图标并对其进行右对齐。或者可以使用自定义菜单操作视图/操作提供程序而不是自定义标题视图。