我有一个活动HomeView
已经扩展了另一个活动并且它不能扩展AppCompatActivity
。但是 HomeView 需要有一个 Toolbar。Android 文档说任何需要有 Toolbar 的活动都必须扩展AppCompatActivity
。
我怎样才能绕过这个限制?
我有一个活动HomeView
已经扩展了另一个活动并且它不能扩展AppCompatActivity
。但是 HomeView 需要有一个 Toolbar。Android 文档说任何需要有 Toolbar 的活动都必须扩展AppCompatActivity
。
我怎样才能绕过这个限制?
您需要实施AppCompatCallback
和使用AppCompatDelegate
. 这是一篇关于如何使用它的优秀文章:https ://medium.com/google-developer-experts/how-to-add-toolbar-to-an-activity-which-doesn-t-extend-appcompatactivity-a07c026717b3# .nuyghrgr9并查看https://developer.android.com/reference/android/support/v7/app/AppCompatDelegate.html了解委派哪些方法。
此类代表一个委托,您可以使用它来扩展 AppCompat 对任何 Activity 的支持。
使用 AppCompatDelegate 时,您应该在其中公开任何方法,而不是同名的 Activity 方法。这适用于:
addContentView(android.view.View, android.view.ViewGroup.LayoutParams)
setContentView(int)
setContentView(android.view.View)
setContentView(android.view.View, android.view.ViewGroup.LayoutParams)
requestWindowFeature(int)
invalidateOptionsMenu()
startSupportActionMode(android.support.v7.view.ActionMode.Callback)
setSupportActionBar(android.support.v7.widget.Toolbar)
getSupportActionBar()
getMenuInflater()
还有一些 Activity 生命周期方法应该代理给委托:
onCreate(android.os.Bundle)
onPostCreate(android.os.Bundle)
onConfigurationChanged(android.content.res.Configuration)
setTitle(CharSequence)
onStop()
onDestroy()
实际上,这很简单:
public class YourActivity extends SomeActivity implements AppCompatCallback {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// create the delegate
delegate = AppCompatDelegate.create(this, this);
delegate.onCreate(savedInstanceState);
delegate.setContentView(R.layout.activity_details);
// add the Toolbar
Toolbar toolbar= (Toolbar) findViewById(R.id.toolbar);
delegate.setSupportActionBar(toolbar);
}
@Override
public void onSupportActionModeStarted(ActionMode mode) {
// leave it empty
}
@Override
public void onSupportActionModeFinished(ActionMode mode) {
// leave it empty
}
@Nullable
@Override
public ActionMode onWindowStartingSupportActionMode(ActionMode.Callback callback) {
return null;
}
而已。请不要AppTheme.NoActionBar
忘记YourActivity
在AndroidManifest.xml
.