我有一个活动HomeView
已经扩展了另一个活动,但无法扩展AppCompatActivity
。但HomeView需要一个工具栏。 Android文档说任何需要工具栏的活动都必须扩展AppCompatActivity
。
我如何解决这个限制?
答案 0 :(得分:3)
您需要实施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()
答案 1 :(得分:0)
实际上,这很简单:
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
。