我想要一个像foursquare这样的Action Bar。我想要的是诸如Friends、Explore 和 Me 之类的标签。此外,在选项卡上方,我希望有一个自定义布局,其中包括一些按钮,例如foursquare 徽标、刷新和在foursquare 中签入。我创建了选项卡,但无法更改 ActionBarSherlock 中选项卡上方的布局。我怎么解决这个问题?
问问题
5475 次
2 回答
7
要实现 Foursquare 外观,您无需考虑在选项卡上方创建布局。使用 Actionbar Sherlock 时,您只需要担心:
- 为顶部栏制作背景
- 为顶部栏制作徽标
- 在 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 回答