AccountAuthenticatorActivity中未显示的操作栏和菜单

时间:2013-09-27 11:54:04

标签: android android-actionbar android-authenticator

由于我的应用程序使用操作栏而不是菜单,因此在我的AccountAuthenticatorActivity实现中没有显示操作栏和/菜单。其他活动显示行动栏没有问题。

我不确定这是一个错误还是缺少对我这方面代码的修改。有人经历过同样的问题吗?我没有找到任何与此问题有关的其他问题。

public class MyAuthenticatorActivity extends AccountAuthenticatorActivity {

...

  @Override
  public boolean onCreateOptionsMenu(final Menu menu) {
    final MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main, menu);
    return true;
  }

XML菜单应该是正确的,因为它在许多其他活动中使用:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/menuHome"
        android:icon="@drawable/ic_menu_home"
        android:orderInCategory="110"
        android:showAsAction="ifRoom"
        android:title="@string/menu_home"/>
    <item
        android:id="@+id/menuSettings"
        android:icon="@drawable/ic_menu_settings"
        android:orderInCategory="111"
        android:showAsAction="ifRoom"
        android:title="@string/menu_settings"/>
    <item
        android:id="@+id/menuInfo"
        android:icon="@drawable/ic_menu_info"
        android:orderInCategory="113"
        android:showAsAction="ifRoom"
        android:title="@string/menu_info"/>

</menu>

1 个答案:

答案 0 :(得分:0)

我知道我的回答很晚。但是我能够在这个one上找到这个基础。由于某种原因,似乎AccountAuthenticatorActivity并没有ActionBar。 ESP。当你想使用支持库时,真的很难处理。

我是这样做的:

您必须使用CoordinatorLayout

附上活动布局
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/coordinatorlayout_homescreen"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/background_login"
    tools:context="com....LoginActivity">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fitsSystemWindows="true"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsingtoolbarlayout_login"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:minHeight="?android:attr/actionBarSize"
            android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleMarginStart="64dp"
            app:expandedTitleMarginEnd="48dp"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar_login"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:fitsSystemWindows="true"
                app:layout_collapseMode="pin"/>

        </android.support.design.widget.CollapsingToolbarLayout>

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">
        ...
    </android.support.v4.widget.NestedScrollView>

</android.support.design.widget.CoordinatorLayout>

正如您所看到的,我根据文档放置了AppBarLayout,并在此处appcompat版本Toolbar。我们稍后会分配此Toolbar

如果您希望像没有动画协调滚动的任何普通活动一样制作CoordinatorLayout,您可以像以下一样设置CollapsingToolbarLayout的属性:

android:minHeight="?android:attr/actionBarSize"
app:layout_scrollFlags="scroll|exitUntilCollapsed"

这样可确保在minHeight设置为Toolbar时向上滚动时?android:attr/actionBarSize不会消失/崩溃。您可以查看其行为here

扩展LoginActivity的{​​{1}}上的下一步,您必须使用AccountAuthenticatorActivity,但在此之前请确保您的LoginActivity实施AppCompatDelegate

AppCompatCallback

你必须实现三种方法,但是根据我的研究,如果你只想显示一个public class LoginActivity extends AccountAuthenticatorActivity implements AppCompatCallback { ... private AppCompatDelegate mAppCompatDelegate; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); ButterKnife.bind(this); ... mAppCompatDelegate = AppCompatDelegate.create(this, this); mAppCompatDelegate.setSupportActionBar(mToolbarLogin); ActionBar actionBar = mAppCompatDelegate.getSupportActionBar(); actionBar.setDisplayShowHomeEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setTitle(getString(R.string.activity_login)); mCollapsingToolbarLayoutLogin.setTitleEnabled(false); } ,他们似乎什么都不做,所以在这个用例中你可以把它们留空:

ActionBar

@Override public void onSupportActionModeStarted(ActionMode mode) { } @Override public void onSupportActionModeFinished(ActionMode mode) { } @Nullable @Override public ActionMode onWindowStartingSupportActionMode(ActionMode.Callback callback) { return null; } 行要求第一个参数上的mAppCompatDelegate = AppCompatDelegate.create(this, this);实例,第二个参数要求回调。

另外,另一件事。如果您希望后退按钮如此代码所示,它不响应click。您可能必须覆盖它:

Activity

我发现使用它的一个小怪癖是状态栏在某些设备上显示为白色。我仍然在寻找如何修复它,但至少@Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case android.R.id.home: onBackPressed(); break; default: return super.onOptionsItemSelected(item); } return true; } 现在有一个AccountAuthenticatorActivity。我不喜欢这个解决方案,因为它可能有点味道。为ActionBar实现看似基本的行为会非常麻烦。

HTH