当前位置: 首页 > 知识库问答 >
问题:

导航抽屉与右侧菜单冲突

阙繁
2023-03-14

我需要你的帮助。我迈出了android编程的第一步!

SOS!!!

我创建了经典的导航抽屉,你可以通过点击汉堡图标或从左侧滑动来打开/关闭。我还创建了右侧菜单(就像在Facebook应用程序中一样),并使用了GitHub的这个库(https://GitHub.com/jfeinstein10/slidingmenu)。最后,我有冲突的抽屉导航菜单和右侧菜单。

当导航抽屉菜单打开时,你想通过从右向左滑动关闭它,打开右侧菜单。

MainActivity中右侧菜单的我的代码:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

SlidingMenu menu = new SlidingMenu(this);
menu.setMode(SlidingMenu.RIGHT);
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
menu.setFadeDegree(0.35f);
menu.attachToActivity(this, SlidingMenu.SLIDING_WINDOW);
menu.setMenu(R.layout.sidemenu);
menu.setBehindWidthRes(R.dimen.slidingmenu_behind_width);

String[] items = {"Fisrt fragment","Second fragment"};
((ListView) findViewById(R.id.sidemenu)).setAdapter(
        new ArrayAdapter<Object>(
                this,
                R.layout.sidemenu_item,
                R.id.text,
                items
        )
);

NavigationDrawer代码:

public class NavigationDrawerFragment extends Fragment {
public static final String PREF_FILE_NAME="testpref";
public static final String KEY_USER_LEARNED_DRAWER="user_learned_drawer";

private ActionBarDrawerToggle mDrawerToggle;
private ListView mDrawerList;
private DrawerLayout mDrawerLayout;

private boolean mUserLearnedDrawer;
private boolean mFromSavedInstanceState;

private View containerView;

public NavigationDrawerFragment() {
    // Required empty public constructor
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mUserLearnedDrawer = Boolean.valueOf(readFromPreferences(getActivity(),KEY_USER_LEARNED_DRAWER,"false"));
    if(savedInstanceState!=null){
        mFromSavedInstanceState=true;
    }
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_navigation_drawer, container, false);
}

public void setUp(int fragmentId, DrawerLayout drawerLayout, final Toolbar toolbar){
    containerView = getActivity().findViewById(fragmentId);
    mDrawerLayout = drawerLayout;
    mDrawerToggle = new ActionBarDrawerToggle(getActivity(),drawerLayout,toolbar,R.string.drawer_open, R.string.drawer_close){

        @Override
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            if(!mUserLearnedDrawer){
                mUserLearnedDrawer=true;
                saveToPreferences(getActivity(), KEY_USER_LEARNED_DRAWER, mUserLearnedDrawer+"");
            }
            getActivity().invalidateOptionsMenu();
        }

        @Override
        public void onDrawerClosed(View drawerView) {
            super.onDrawerClosed(drawerView);
            getActivity().invalidateOptionsMenu();
        }

        public void onDrawerSlide(View drawerView, float slideOffset) {
            super.onDrawerSlide(drawerView, slideOffset);

            if(slideOffset<0.6) {
                toolbar.setAlpha(1 - slideOffset);
            }
        }
    };
    if(!mUserLearnedDrawer&&!mFromSavedInstanceState){
        mDrawerLayout.openDrawer(containerView);
    }
    mDrawerLayout.setDrawerListener(mDrawerToggle);

    mDrawerLayout.post(new Runnable() {
        @Override
        public void run() {
            mDrawerToggle.syncState();
        }
    });

}
public static void saveToPreferences(Context context,String preferenceName, String preferenceValue){
    SharedPreferences sharedPreferences = context.getSharedPreferences(PREF_FILE_NAME, context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString(preferenceName, preferenceValue);
    editor.apply();
}
public static String readFromPreferences(Context context, String preferenceName, String defaultValue){
    SharedPreferences sharedPreferences = context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_APPEND);
    return  sharedPreferences.getString(preferenceName, defaultValue);
}

暂时还没有答案

 类似资料:
  • 我想在ActionBar的右侧[而不是默认的左侧]显示ActionBar导航图标。 此外,我需要有相同的幻灯片在动画导航抽屉图标在Gmail和谷歌加应用程序。 有没有什么方法可以轻松实现右侧的动画。 任何形式的帮助或建议都是感激的。 提前道谢!

  • 我已经设置了一个左右两侧的导航抽屉。除了一件事,一切都很好。 我希望我的另一个动作栏项目切换右边的抽屉菜单。正常的左边动作栏切换效果很好。谷歌Android应用程序通知面板是我希望动作模仿的。 下面是我用来设置右侧切换的代码(现在它在单击时强制关闭): 如果有人知道怎么做,如果你能让我知道就太好了! 谢谢

  • 我知道如何改变抽屉图标,如果它在左侧,但我没有找到任何解决方案,改变导航抽屉汉堡图标,如果抽屉是在右侧。任何帮助都是可以感激的。

  • http://developer.android.com/training/implementation-navigation/nav-drawer.html 根据这份文件,它没有说明是否可以实现从右手边抽屉。有可能吗?:(

  • 问题内容: 我有一个导航图,该导航图将此片段用作主活动XML中的主页。 我有一个带有菜单的Drawer布局,单击导航抽屉按钮时,我无法设法使导航正常工作(它可以从主要片段工作,但是当我单击Drawer按钮时,不能工作),如果我使用的是旧方法使用:对导航抽屉编程,我的navcontroller丢失了!!我得到类似的错误 navcontroller无法识别目标片段,因为即使不是这种情况,控制器也会看到

  • 我有一个导航图,它在主活动XML中使用这个片段作为主页。 我有一个带菜单的抽屉布局,当我点击抽屉菜单按钮时,我无法使导航工作(它从主片段工作,但当我点击抽屉按钮时就不工作),如果我使用旧的方式来编程抽屉菜单: