3

我有一个活动HomeView已经扩展了另一个活动并且它不能扩展AppCompatActivity。但是 HomeView 需要有一个 Toolbar。Android 文档说任何需要有 Toolbar 的活动都必须扩展AppCompatActivity

我怎样才能绕过这个限制?

4

2 回答 2

3

您需要实施AppCompatCallback和使用AppCompatDelegate. 这是一篇关于如何使用它的优秀文章:https ://medium.com/google-developer-experts/how-to-add-toolbar-to-an-activity-which-doesn-t-extend-appcompatactivity-a07c026717b3# .nu​​yghrgr9并查看https://developer.android.com/reference/android/support/v7/app/AppCompatDelegate.html了解委派哪些方法。


AppCompatDelegate

此类代表一个委托,您可以使用它来扩展 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()
于 2015-10-28T17:41:06.653 回答
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忘记YourActivityAndroidManifest.xml.

于 2019-11-12T19:13:18.527 回答