使用customview和menuitems的Actionbar

时间:2014-02-18 16:03:11

标签: android

ActionBar actionBar = getActionBar();
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 
actionBar.setCustomView(R.layout.myLayout);

...

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    getMenuInflater().inflate(R.menu.myMenu, menu);

    menuBar = menu;

    return true;
}

myLayout.xml

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

 <ImageView
    android:layout_width="40dp" 
    android:layout_height="40dp"
    android:layout_centerInParent="true"
    android:src="@drawable/myImage" />
</RelativeLayout>

myMenu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
    android:id="@+id/menuItem1"
    android:icon="@drawable/icon1"
    android:showAsAction="always"
    android:visible="false"
    android:title="@string/menu1">
</item>
<item
    android:id="@+id/menuItem2"
    android:icon="@drawable/icon2"
    android:showAsAction="always"
    android:title="@string/menu2">
</item>

</menu>

我有一个自定义视图,用于将图像放在ActionBar的中心。但是,当我将MenuItem放在ActionBar上时,图像会被推到左侧。我不知道如何使图像居中或填充RelativeLayout以获取整个ActionBar宽度。我尝试了很多不同的东西,但到目前为止我没有运气。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

将自定义视图添加到ActionBar后,您可以为View设置自定义ActionBar.LayoutParams

要执行您要执行的操作,您可以将代码更改为:

mLayout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

 <ImageView
    android:layout_width="40dp" 
    android:layout_height="40dp"
    android:src="@drawable/myImage" />

</LinearLayout>

onCreate(Bundle b)

中调用某个地方
public void setUpActionBar(){
     View view = getLayoutInflater().inflate(R.layout.mLayout);

     ActionBar.LayoutParams lp = new ActionBar.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.CENTER);

     final ActionBar bar = getActionBar();
     bar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
     bar.setCustomView(view, lp);

}