android - 工具栏顶部的上下文叠加堆叠

标签 android android-fragments navigation-drawer material-design android-toolbar

我已经阅读了有关此问题的每个答案,但似乎仍然无法使其发挥作用。当我调用 startSupportActionMode 时,操作模式菜单堆叠在工具栏的顶部,而不是替换它。此图来自另一位遇到相同问题的用户。

enter image description here

大多数其他问题都通过在样式中使用 windowActionModeOverlay 得到解决。这似乎对我不起作用。我还确定我正在导入校正操作模式。

(import android.support.v7.view.ActionMode;
)

我的情况有点不同。我的主要 Activity 是 AppCompatActivity。我根据抽屉导航中的选择加载不同的 fragment 。操作栏根据所选的导航项而更改。

在我切换到 appCompat-v7 之前,此代码全部有效。我正在尝试转换为新的 Material 设计,因此用工具栏替换基本操作栏。以下是一些代码 fragment :

list :

    <application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:name="com.acme.common.MINApplication"
    android:largeHeap="true">

    <activity android:name="com.acme.common.MINMainActivity"
              android:theme="@style/AppTheme"
              android:configChanges="orientation|screenSize|keyboardHidden" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

样式:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Main theme colors -->
    <!--   your app branding color for the app bar -->
    <item name="android:colorPrimary">@color/ColorPrimary</item>
    <!-- Support library compatibility -->
    <item name="colorPrimary">@color/ColorPrimary</item>

    <!--   darker variant for the status bar and contextual app bars -->
    <item name="android:colorPrimaryDark">@color/ColorPrimaryDark</item>
    <!-- Support library compatibility -->
    <item name="colorPrimaryDark">@color/ColorPrimaryDark</item>

    <!--   theme UI controls like checkboxes and text fields -->
    <item name="android:statusBarColor">@android:color/transparent</item>

    <item name="windowActionModeOverlay">true</item>
    <item name="android:windowActionModeOverlay">true</item>
</style>

主要 Activity :

 public class MINMainActivity extends AppCompatActivity 
 {
private final String TAG = ((Object) this).getClass().getSimpleName();

private View mMainView;

// New Toolbar and Navigation View
public Toolbar toolbar;
public RecyclerView recyclerView;
private MINPageAdapter adapter;
private RecyclerView.LayoutManager layoutManager;
public DrawerLayout drawerLayout;
public android.support.v7.app.ActionBarDrawerToggle drawerToggle;

volatile public boolean isDrawerOpen = false;
private Menu mMenu;


@Override
public void onCreate(Bundle savedInstanceState)
{
    supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS | Window.FEATURE_ACTION_BAR_OVERLAY);

    super.onCreate(savedInstanceState);

    // Inflate main view
    mMainView = getLayoutInflater().inflate(R.layout.material_design_drawer_layout, null);

    setContentView(mMainView);

    sharedInstance = this;

    // Setup New Toolbar implementation
    setupToolbar();

    // Setup Recycler Adapter
    setupAdapter();

    // Setup Navigation View
    initNavigationDrawer();

    // Show startup screen/fragment
    showStartupScreen();

    // Color components based on json settings
    setCustomAttributes();

  init();
}

fragment :

 public class MINPageTypeGridFragment extends Fragment 
 {
 @Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    setRetainInstance(true);
    setHasOptionsMenu(true);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    // Inflate view
    gridView = (StickyGridHeadersGridView)inflater.inflate(R.layout.page_gridview_fragment, container, false);

    // Set up specific controls/views
    initializeGridView(inflater, container);

    ...

    return gridView;
}

@Override
public void onResume()
{
    ActionBar actionBar = MINMainActivity.getSharedInstance().getSupportActionBar();
    if(actionBar != null)
    {
        actionBar.show();
        actionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP |
                                    ActionBar.DISPLAY_SHOW_HOME |
                                    ActionBar.DISPLAY_USE_LOGO |
                                    ActionBar.DISPLAY_SHOW_TITLE);
        actionBar.setTitle(pageDefinition.pageName);
    }

    ...

    super.onResume();
}


@Override
public boolean onOptionsItemSelected(MenuItem item)
{
    int count = 0;

    ...
                freezeGridView();
                mActionMode = MINMainActivity.getSharedInstance().startSupportActionMode(mActionModeCallback);
    ...
    return super.onOptionsItemSelected(item);
}


public ActionMode.Callback mActionModeCallback = new ActionMode.Callback()
{
    @Override
    public boolean onCreateActionMode(ActionMode actionMode, Menu menu)
    {
        MenuItem shareMenuItem;

        ...
                actionMode.getMenuInflater().inflate(R.menu.gridview_edit_menu, menu);
                shareMenuItem = menu.findItem(R.id.MenuItemShare);
                mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(shareMenuItem);
                if(mShareActionProvider != null)
                {
                    mShareActionProvider.setShareIntent(Share(null));
                    mShareActionProvider.setOnShareTargetSelectedListener(new ShareActionProvider.OnShareTargetSelectedListener()
                    {
                        @Override
                        public boolean onShareTargetSelected(ShareActionProvider shareActionProvider, Intent intent)
                        {
                            if(mActionMode != null)
                            {
                                currentMode = MODE_STANDARD;
                                clearSelectedItems();
                                mActionMode.finish();
                                mActionMode = null;
                            }
                            return false;
                        }
                    });
        ...
        return true;
    }

    @Override
    public boolean onPrepareActionMode(ActionMode actionMode, Menu menu)
    {
        return false;
    }

    @Override
    public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem)
    {
        switch(menuItem.getItemId())
        {
            case R.id.MenuItemEdit:
                launchAlbumItemDetails(MINPageTypeGridFragment.this, currentAlbumItem, pageDefinition.pageConfigFileName);
                return true;
            case R.id.MenuItemDelete:
                deleteItem(MINPageTypeGridFragment.this, currentAlbum, currentAlbumItem);
                return true;
            default:
                return false;
        }
    }

    @Override
    public void onDestroyActionMode(ActionMode actionMode)
    {
        clearSelectedItems();
    }

}

我确信我错过了一些明显的东西,但我没有想法。

最佳答案

您应该删除“重复”定义:android:windowActionModeOverlay -> windowActionModeOverlay; android:colorPrimary -> colorPrimary 等等。这是一个应该有效的示例:

<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="windowActionModeOverlay">true</item>
    <item name="colorControlNormal">@color/appColorControlNormal</item>
    <item name="colorControlHighlight">@color/appColorControlHighlight</item>
    <item name="colorControlActivated">@color/appColorControlActivated</item>
    <item name="colorPrimary">@color/appColorPrimary</item>
    <item name="colorPrimaryDark">@color/appColorPrimaryDark</item>
    <item name="colorAccent">@color/appColorAccent</item>
</style>

关于android - 工具栏顶部的上下文叠加堆叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32535182/

相关文章:

android - 我想在两个 Activity 之间添加进度条

android - 如何在 fragment 中使用 Retrofit 和 Loader 类

Android 使用自定义 View 多次 inflatedView

android - 如何通过导航 View 进行导航

java - 如何以及在何处在 xml 中定义此 ImageView?

android - viewPager.getChildCount() 在 onActivityResult 之后为零

java - 测量眼睛图像中的瞳孔大小

android - 如何连接到 Android 上的 IPv6 地址?

android - fragment 中奇怪的 onPause()、onResume() 行为

android - DrawerLayout 内的布局选择器不起作用