5

在此处输入图像描述

我想要一个像foursquare这样的Action Bar。我想要的是诸如Friends、Explore 和 Me 之类的标签。此外,在选项卡上方,我希望有一个自定义布局,其中包括一些按钮,例如foursquare 徽标、刷新和在foursquare 中签入。我创建了选项卡,但无法更改 ActionBarSherlock 中选项卡上方的布局。我怎么解决这个问题?

4

2 回答 2

7

要实现 Foursquare 外观,您无需考虑在选项卡上方创建布局。使用 Actionbar Sherlock 时,您只需要担心:

  1. 为顶部栏制作背景
  2. 为顶部栏制作徽标
  3. 在 menu.xml 文件中添加项目,ActionbarSherlock 将使用这些项目用按钮填充顶部(只要将使用 Actionbar Sherlock 样式的样式附加到 thw 活动)。

因此,对于 1. 和 2. 来说,这完全是关于使用 styles.xml 文件(应该位于 res 文件夹中的 values 文件夹中),如下所示:

<style name="Theme.Example" parent="Theme.Sherlock">
    <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
    <item name="absForceOverflow">true</item>       
</style>

<style name="Widget.Styled.ActionBar" parent="Widget.Sherlock.ActionBar.Solid">
    <item name="background">@drawable/actionbar_background</item> <-- the background for top bar
    <item name="icon">@drawable/actionbar_logo</item> <-- the logo that goes top left in the top bar
    <item name="backgroundSplit">@drawable/bg_striped_split</item> <-- the image used between the menu items
</style>

对于 3. 您需要做的就是在 menu.xml 下创建菜单项(应该位于 menu 文件夹中(如果没有,请在 res 文件夹中创建一个)):

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">     

<item android:id="@+id/menu_prefs"
      android:icon="@drawable/settings_icon"
      android:title="Preferences"
      android:showAsAction="ifRoom" /> 
</menu>

要查看菜单项,您要做的最后一件事是在活动中使用这些功能:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.menu.menu, menu);
    return true;
}

public boolean onOptionsItemSelected (MenuItem item) {

    Intent intent;

    switch (item.getItemId())
    {   
    case R.id.menu_prefs:

        // Launch Preference Activity
        intent = new Intent(getBaseContext(), Preferences.class);           
        startActivity(intent);
        break;
    }

    return false;
}
于 2012-07-10T12:29:11.047 回答
3

要设置您的自定义操作项(刷新、签入、...),您必须覆盖 onCreateOptionsMenu(Menu menu) 并设置您的自定义菜单。

例如:

文件菜单/my_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/refresh"
        android:icon="@drawable/ic_menu_refresh"
        android:title="refresh"
        android:showAsAction="always">
    </item>

</menu>

然后在您的活动(或片段)中:

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
  MenuInflater inflater = getSupportMenuInflater();
  inflater.inflate(R.menu.my_menu, menu);

  // Allow activity and fragments to add items
  super.onCreateOptionsMenu(menu);

  return true;
}

并且要在它们被选中时得到通知,只需覆盖 onOptionsItemSelected(MenuItem item):

@Override
public boolean onOptionsItemSelected(MenuItem item)
{
  switch (item.getItemId())
  {
    case android.R.id.refresh :
      // refresh your data...
      return true;

    default :
      return super.onOptionsItemSelected(item);
  }
}
于 2012-07-10T12:27:12.423 回答