如何在FragmentActivity上设置工具栏?

时间:2016-01-19 06:51:17

标签: android android-fragmentactivity android-toolbar

我想在我的活动上设置工具栏,扩展 FragmentActivity 。我知道,对于使用data方法,我们扩展setSuppoertActionBar(toolbar)而不是AppCompatActivity,但我覆盖FragmentActivity方法,这是onMenuItemSelected(int featureId, MenuItem item)中的最终方法,而最终方法无法覆盖。所以我只能扩展AppCompatActivity

这是我的代码:

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方法。

我该怎么办,请帮忙。

4 个答案:

答案 0 :(得分:9)

当您使用NavigationDrawer 时,此功能非常好 使用此: -

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

然后根据onNavigationItemSelected 中不同标题的不同片段设置工具栏标题: -

@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");
        } 

对于单个片段,首先要像这样自定义style.xml: -

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

</style>

然后应用到您的自定义toolbar: -

<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>

答案 1 :(得分:1)

您还可以创建自己的toolbar

首先设置主题以扩展Theme.AppCompat.Light.NoActionBar

<style name="style_1" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->

</style>

请记住应用主题:

@Override
protected void onCreate(Bundle savedInstanceState) {
    this.setTheme(R.style.style_1);
    // ...
}

然后在Activity的xml中,您可以设置自己的自定义toolbar

<include layout="@layout/my_toolbar"/>

其中@layout/my_toolbar可能如下所示:

<android.support.v7.widget.Toolbar 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="@dimen/toolbar_height"
    app:contentInsetStart="0dp"
    app:layout_collapseParallaxMultiplier="1.0">

    <!-- insert your views here -->
</android.support.v7.widget.Toolbar>

答案 2 :(得分:0)

n4 = 0
if ( j1 != j6 )
    ++n4;
if ( j1 + 1 != j2 )
    ++n4;
if ( j4 + 1 != j1 )
    ++n4;
if ( j3 + 4 != j6 )
    ++n4;
if ( j5 + 2 != j3 )
    ++n4;
n5 = n4 + (j4 ^ 102) + j7;

答案 3 :(得分:0)

您应该从AppCompatActivity扩展Activity,因为这包括对Fragments和Toolbar的支持。 然后覆盖

  

onCreateOptionsMenu()和onOptionsItemSelected()方法

你不应该重写

  

onMenuItemSelected()

public class MainActivity extends AppCompatActivity { ...

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    FragmentTransaction ft = getSupportFragmentManager.beginTransaction();
    ....


    ....
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
      ...
         ...
    }


   @Override
   public boolean onOptionsItemSelected(MenuItem item) {

   ...
  }