android - 如何在 FragmentActivity 上设置工具栏?

标签 android android-fragmentactivity android-toolbar

我想在扩展FragmentActivity 的 Activity 上设置工具栏。我知道为了使用 setSuppoertActionBar(toolbar) 方法,我们扩展了 AppCompatActivity 而不是 FragmentActivity 但我覆盖了 onMenuItemSelected(int featureId, MenuItem item) 方法在 AppCompatActivity 中是 final 并且 final 方法不能覆盖。所以我只能扩展 FragmentActivity

这是我的代码:

public class MainActivity extends FragmentActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);   -> error is here
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
    {
       // Inflate the menu
       getMenuInflater().inflate(R.menu.menu_main, menu);
       return true;
    }

    @Override
    public boolean onMenuItemSelected(int featureId, MenuItem item) {
        switch(item.getItemId()){
            case R.id.action_search:
                onSearchRequested();
                break;
        }
        return super.onMenuItemSelected(featureId, item);
    }

我看到很多与该问题相关的答案,但每个人都说扩展 AppCompatActivity 而不是 FragmentActivity 但我想设置工具栏以及覆盖 onMenuItemSelected(int featureId , MenuItem 项) 方法。

我该怎么办,求助

最佳答案

当你使用NavigationDrawer这个东西很好 使用这个:-

 toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);

然后在 onNavigationItemSelected 中根据不同的 fragment 设置不同的 Toolbar Title :-

@Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.

        sfm = getSupportFragmentManager();
        Fragment fragment = new Fragment();
        int id = item.getItemId();

        if (id == R.id.nav_id) {
            fragment = new YourFragment();
            toolbar.setTitle("SET TOOLBAR NAME");
        }else if (id == R.id.nav_id2) {
            fragment = new YourFragment();
            toolbar.setTitle("SET TOOLBAR NAME");
        } 

对于单个 fragment ,首先像这样自定义您的 style.xml :-

<style name="YourStyleName" parent="Theme.AppCompat.Light.DarkActionBar">
// ToDo as you want to do or as per your requirement

</style>

然后应用到您的自定义工具栏:-

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    app:popupTheme="@style/YourStyleName" >

  // ...........


</android.support.v7.widget.Toolbar>

关于android - 如何在 FragmentActivity 上设置工具栏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34870245/

相关文章:

android - 使用 TabLayout 时工具栏消失

android - 工具栏标题全宽

java - ListView 自定义适配器,使用 AsyncTask 删除项目

android - 尝试从 Android Studio 添加 Firebase 项目时出错

java - Activity 和可见 fragment 未正确记录

java - 尝试从 Fragment Activity 更新共享首选项

android - 以编程方式更改 6.0 中的屏幕亮度

java - 读取已拆分为两个文件的 Java 序列化对象?

android - 导航到下一个 Activity 时更改操作栏颜色及其文本对齐方式

java - 工具栏和状态栏之间的空白