gpt4 book ai didi

android - AccountAuthenticatorActivity 中未显示操作栏和菜单

转载 作者:太空狗 更新时间:2023-10-29 15:08:44 24 4
gpt4 key购买 nike

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

我不确定这是错误还是我这边的代码缺少改编。有人遇到过同样的问题吗?我没有找到与此问题相关的任何其他问题。

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 菜单,因为它在许多其他 Activity 中使用:

<?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>

最佳答案

我知道我的回答迟到了。但是我能够在这个 one 上绕过这个基地.由于某种原因,AccountAuthenticatorActivity 似乎并没有真正的 ActionBar。特别是当你想使用支持库时,它真的很难工作。

这是我的做法:

您必须使用 CoordinatorLayout 包含您的 Activity 布局:

<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

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

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

这将确保您的 Toolbar 在您向上滚动时不会消失/折叠,因为 minHeight 已设置为 ?android:attr/actionBarSize。你可以检查它的行为 here .

接下来在扩展 AccountAuthenticatorActivityLoginActivity 上,您必须使用 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 实现看似基本的行为非常麻烦。

HTH

关于android - AccountAuthenticatorActivity 中未显示操作栏和菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19050110/

24 4 0