如何在所有活动中添加通用按钮



我们可以在所有活动上添加一个公共按钮而不在xml文件中添加代码吗。

我们需要在应用程序类中添加一些代码,并在应用程序的所有活动中显示按钮。

首先创建一个BaseActivity。然后将此代码添加到onCreate of that:

class BaseActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_nav_host)
//the layout of baseActivity 
LinearLayout layout =(LinearLayout) findViewById (R.id.base_activity_layout);
//set the properties for button
Button btnTag = new Button(this);
btnTag.setLayoutParams(
new LayoutParams (LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT
));
btnTag.setText("Button");
btnTag.setId(some_random_id);
//add button to the layout
layout.addView(btnTag);
}
}

然后让您要创建的其他活动从BaseActivity继承。

class FirstActivity : BaseActivity() {
//
//
}
class SecondActivity : BaseActivity() {
//
//
}
class ThirdActivity : BaseActivity() {
//
//
}

class按钮活动:活动(({受保护的var btnCommon:按钮

override fun onCreate(saved: Bundle?) {
var layout = findViewById(R.id.layout) as ConstraintLayout
btnCommon = Button(this)
// set Button properties
layout.addView(button)
}

}

如何使用

class MyActivity: ButtonActivity() {
onCreate() {
this.btnCommon.setOnClickListener...... // now you can use.
}
}

我在您的评论中看到,您特别希望只从应用程序类中执行此操作。可以添加在每个"活动"的生命周期方法期间调用的回调,因此您可以在其中添加一个按钮。您的每一个活动都必须在其布局中具有相同类型和相同ID的根视图才能工作。

class MyApplication: Application() {
override fun onCreate() {
super.onCreate()

registerActivityLifecycleCallbacks(object: ActivityLifecycleCallbacks {
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
val rootView = activity.findViewById<ConstraintLayout>(R.id.myRootView)
val layoutParams = ConstraintLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
).apply {
// Set up the appropriate layout constraints here
}
val button = Button(/* ... */)
rootView.addView(button, layoutParams)
}
override fun onActivityStarted(activity: Activity) = Unit
override fun onActivityResumed(activity: Activity) = Unit
override fun onActivityPaused(activity: Activity) = Unit
override fun onActivityStopped(activity: Activity) = Unit
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) = Unit
override fun onActivityDestroyed(activity: Activity) = Unit
})
}

}

就我个人而言,我认为这很混乱,我会在您在每个活动中从onCreate()调用的顶级函数中进行。或者更好的是,在你的应用程序中使用一个"活动",并在不同的屏幕上使用碎片。

最新更新