有没有更好的方法来编写 android 工具栏重复方法而不是在每个 activity 中编写相同的代码

Is there a better way to write android toolbar repeated methodes rather than writing the same code in every activity

我有 3 个活动,它们都有一个工具栏,它们都工作正常,但它们的工具栏都略有不同,所以我不得不在每个活动中写很多类似的行 activity, 是否可以为工具栏自定义 xml 布局制作 class 与 php 相同,在 php 中制作共享的 header对于所有页面,您都以一种根据您所在的页面动态变化的方式对 header 进行编程,请注意,如果它们是分开的,代码工作正常 我唯一的问题是我想让我的工具栏方法与我的 activity 方法。

关于工具栏的自定义、继承、包含等,您可以做很多事情。一种方法是从 android.support.v7.widget.Toolbar 继承。将您的 CustomToolbar 放到适当的 activity_any_name.xml。

3 个 Activity 中的每一个都将从您的 UpperActivity 继承,并有可能覆盖特别是仅对自己的目的合法的自定义设置。

您可以简单地创建一个基础 activity,您可以在其中定义工具栏装饰的方法。工具栏的所有类似代码行都可以用该方法编写。如果您希望该方法对每个 activity 执行不同的装饰,您可以采用方法参数形式进行所有必须进行的更改。这将帮助您减少在每个 activity.

中编写的重复代码行

示例:

class CustomBaseActivityClass extends AppCompatActivity{

// Overriden methods

// onCreate()

// onStart()

    public void decorateToolbar(Toolbar toobar //pass the toolbar reference to be attached,
    // optional: you can take required information from the extending activity to perform different actions for toolbar){

    // write the repetitive code for defining and attaching toolbar

    }

}

因此,这将是基础 Activity class,它将从 activity 的其余部分扩展,而不是直接扩展 AppCompatActivity。

现在为您创建的每个新 activity 扩展 CustomBaseAcitivity class。 这也可以用于您的活动中出现的其他重复代码,通过使用继承,您可以重用编写的代码。 与其为每个 activity 一次又一次地编写相同的代码,不如将它写在一个 BaseActivity 中,它将作为每个其他活动的父 Class。

SampleActivity extends CustomBaseActivity{

    void onCreate(// same overridden method){
        decorateToolbar(); // calling decorate toolbar method for attaching toolbar to the current activity.
    }
}

您可以创建自己的工具栏,从 android.support.v7.widget.Toolbar 扩展而来。 像这样

public class YourToolbar extends android.support.v7.widget.Toolbar{

public YourToolbar (Context context) {
    super(context);
    initViewComponents(context);
}


public YourToolbar (Context context, @Nullable AttributeSet attrs) {
    super(context, attrs);
    initViewComponents(context);
}

public YourToolbar (Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    initViewComponents(context);
}
private void initViewComponents(Context context) {
   //here the shared code between all activities
     if(context instanceof FirstActivity){
    //code fore just the first Acitivity
     }if(context instanceof SecondActivity){
      //code fore just the secondAcitivity
     }else if(context instanceof ThreardActivity){
      }
    //here the shared code between all activities
  }
 }

在您的 xml 视图中用您的视图替换默认工具栏

在活动中 类 将默认工具栏替换为您的