Панель действий и меню не отображаются в AccountAuthenticatorActivity

Поскольку я использую панель действий вместо меню для своего приложения, в моей реализации 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 ответ

Я знаю, что мой ответ опоздал. Но я смог обойти эту базу на этом. Кажется AccountAuthenticatorActivity на самом деле не имеет ActionBar по какой-то причине. Особенно это действительно трудно работать, когда вы хотите использовать библиотеку поддержки.

Вот как я это сделал:

Вы должны приложить свой макет деятельности, используя 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"

Это сделает ваш Toolbar не исчезнет / не рухнет при прокрутке вверх, поскольку minHeight был установлен в ?android:attr/actionBarSize, Вы можете проверить его поведение здесь.

Далее на вашем LoginActivity который расширяется AccountAuthenticatorActivity, вы должны использовать AppCompatDelegate но перед этим убедитесь, что LoginActivity реализует 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); попросить 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, Мне не нравится это решение, так как оно немного хакерское на вкус. Так много хлопот, чтобы реализовать, казалось бы, базовое поведение для Activity,

НТН

Другие вопросы по тегам