有没有更好的方法来编写 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 视图中用您的视图替换默认工具栏
在活动中 类 将默认工具栏替换为您的
我有 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 视图中用您的视图替换默认工具栏
在活动中 类 将默认工具栏替换为您的