在所有活动中使用工具栏作为ActionBar,无需在每个活动中以编程方式执行

时间:2016-11-04 17:40:31

标签: android android-actionbar toolbar

我在onCreate()中放置了以下代码,将我在每个Activity中使用的工具栏设置为ActionBar:

    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);

这很好用并显示每个Activity中的后退箭头和标题,这是必要的,因为我们将自定义内容添加到我们的ToolBar中,但是在每个Activity中都必须这样做很麻烦和烦人。

在没有重复的情况下实现此行为的最佳方法是什么?它可以用风格来完成吗?

2 个答案:

答案 0 :(得分:1)

您应该像这样创建基本活动:

public class Base extends AppCompatActivity {

TextView icon1;

@Override
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
    super.onCreate(savedInstanceState, persistentState);

    initToolbar()
}


public void  initToolbar() {
    .
    .
    .
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);
    if (showIcon1())
        icon1.setVisibility(View.VISIBLE);
    else
        icon1.setVisibility(View.GONE);
}

public boolean showIcon1(){
    return  true;
}


和其他活动:

public class OtherActivity extends Base {

@Override
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
    super.onCreate(savedInstanceState, persistentState);
}

@Override
public boolean showIcon1() {
    return false;
}<br>

希望得到这个帮助。

答案 1 :(得分:0)

我不确定&#34;最好&#34;但如果你真的想在你的所有活动中有这两个选择:

  1. 继承:一种非常常见的Android / Java方法是将Activity子类化,然后将其作为基础。 E.g:

     public class BaseActivity extends Activity {
     @Override
       protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setupToolbar();
       }
    
       private void setupToolbar() {
        // do whatever you need to do
       }
     }
    
    public class YourFancyClass extends BaseActivity {
     @Override
     protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
          // Do anything you need to. The toolbar is set by the base class.
     }
    }
    
  2. 这是一个选项(非常受欢迎)

    1. 计划B将使用作文,主要是在iOS方面首选,但仍然非常有效(有时更合适,我们现在没有讨论):)
    2. 基本上有一个能够设置工具栏的对象。创建可以表示该行为的接口。有一个这种行为的实现(Java通常称它们为XxxxxImpl,并将该接口和实现传递给需要它的活动。

      听起来更复杂,但一旦你把它们放在一起,它就会非常干净和清晰。