7

我是 android 的新手,我想知道是否有人可以指导我如何在我的所有 android 活动中重用操作栏。据我探索,我发现我们必须创建一个 BaseActivity 类并在我们想要重用它的 Activity 中扩展它,而且我们必须制作一个 xml 布局并将其包含在我们的 Activity xml 文件中。我已经完成了 BaseActivity 部分。现在我在构建 xml 部分并包含它时有点困惑。我知道如何合并和包含布局,但是对于操作栏,需要采取哪些必要的步骤。任何帮助,将不胜感激。

这是我的 BaseMenuActivity:

public class BaseMenuActivity extends Activity{

    ActionBar actionBar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setDisplayShowCustomEnabled(true);
        actionBar.setIcon(R.drawable.ic_social_share);
        LayoutInflater inflator = (LayoutInflater) this
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = inflator.inflate(R.layout.apptitle, null);
        actionBar.setDisplayShowTitleEnabled(false);
        actionBar.setCustomView(v);
    }
}

清单部分相同:

<activity
            android:name="com.example.travelplanner.MenuActivity"
            android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden"
            android:uiOptions="splitActionBarWhenNarrow"
            android:label="WeTrip"
            android:theme="@style/MyTheme" >

Style.xml 部分:

<style name="MyTheme" parent="@android:style/Theme.Holo.Light">
        <item name="android:actionBarStyle">@style/MyActionBar</item>
    </style>
    <style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
        <item name="android:background">#F0F1F1</item>
        <item name="android:backgroundSplit">#000000</item>
    </style>

MenuActivity.java

public class MenuActivity extends BaseMenuActivity implements OnItemClickListener{

    ActionBar actionBar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_menu);

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu, menu);
        SearchView searchView = (SearchView) menu.findItem(R.id.menu_action_search).getActionView();
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        switch(item.getItemId()){
            case R.id.menu_action_search:
            {}
            case R.id.menu_action_locate:
            {}
            case R.id.menu_action_mail:
            {}
            case R.id.menu_action_call:
            {}
        }
        return super.onOptionsItemSelected(item);
    }

}
4

1 回答 1

10

好吧,您的代码看起来不错,但是如果您想在每个活动中重用具有相同图标和菜单以及通常相同功能的完全相同的 ActionBar。

您可以添加代码:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu, menu);
        SearchView searchView = (SearchView) menu.findItem(R.id.menu_action_search).getActionView();
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        switch(item.getItemId()){
            case R.id.menu_action_search:
            {}
            case R.id.menu_action_locate:
            {}
            case R.id.menu_action_mail:
            {}
            case R.id.menu_action_call:
            {}
        }
        return super.onOptionsItemSelected(item);
    }

在您的 BaseMenuActivity 类中,您的操作栏将为从它扩展的每个活动填充相同的内容。

更新:

要创建菜单布局,您应该在资源文件夹 res/menu 中创建一个文件夹“menu”。然后在里面创建一个xml文件:some_title.xml

菜单 xml 文件的典型示例如下所示:

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

    <item
        android:id="@+id/menu_search"
        android:actionViewClass="com.actionbarsherlock.widget.SearchView"
        android:icon="@drawable/abs__ic_search"
        android:showAsAction="ifRoom|withText|collapseActionView"
        android:title="@string/menu_action_search"/>
    <item
        android:id="@+id/menu_sort"
        android:icon="@drawable/content_sort_icon"
        android:showAsAction="always"
        android:title="@string/menu_action_sort">
    </item>

</menu>

然后膨胀该文件:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.some_title, menu);
        SearchView searchView = (SearchView) menu.findItem(R.id.menu_action_search).getActionView();
        return true;
    }

更多阅读本教程非常适合使用 ActionBar:

http://www.vogella.com/tutorials/AndroidActionBar/article.html

于 2013-07-26T19:35:37.667 回答