0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 35
1

Конфликт между Navigation Drawer и Side Menu

16.12.2014, 18:25. Показов 681. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброе время суток, форумчане! Нужна ваша помощь! SOS!

Дела в том, что я создал классический навигационное меню (Navigation Drawer), которое можно встретить практически во всех приложениях Google. Также добавил справа так называемый sliding side menu. Данное меню вы скорее всего встречали в приложении Facebook`a. (Использовал кстати данную библиотеку кому интересно https://github.com/jfeinstein10/SlidingMenu).

Проблема следующая: когда открыт Navigation Drawer и ты хочешь его закрыть движение пальца с права на лева открывается side menu справа. Как сказать программно, что когда открыт Navigation Drawer так называемый sliding не действует для side menu?! Что надо добавить, чтобы сперва закрывался Navigation Drawer, а затем уже ты мог бы открыть side menu. Внизу выложил код и рисунок для наглядности!

Выручайте! Нужна помощь! Буду рад любой помощи! =)

Конфликт между Navigation Drawer и Side Menu


Код навигационного меню слева(Navigation Drawer):
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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);
    }
}


Код MainActivity в котором описано поведение side menu справа:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
public class MainActivity extends ActionBarActivity {
 
    private Toolbar toolbar;
    private SlidingMenu menu;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        toolbar = (Toolbar) findViewById(R.id.application_toolbar);
        setSupportActionBar(toolbar);
 
        getSupportActionBar().setDisplayShowHomeEnabled(true);
 
        NavigationDrawerFragment drawerFragment = (NavigationDrawerFragment)getFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);
        drawerFragment.setUp(R.id.fragment_navigation_drawer,(DrawerLayout)findViewById(R.id.drawer_layout), toolbar );
       //описываем side menu
        SlidingMenu menu = new SlidingMenu(this);
        menu.setMode(SlidingMenu.RIGHT);
        menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
        menu.setFadeDegree(0.35f);
        menu.setShadowWidth(15);
        menu.setShadowDrawable(R.drawable.shadow);
        menu.attachToActivity(this, SlidingMenu.SLIDING_WINDOW);
        menu.setMenu(R.layout.side_menu);
        menu.setBehindWidthRes(R.dimen.side_menu_behind_width);
 
        String[] items = {"Первый фрагмент","Второй фрагмент"};
        ((ListView) findViewById(R.id.side_menu)).setAdapter(
                new ArrayAdapter<Object>(
                        this,
                        R.layout.side_menu_items,
                        R.id.text,
                        items
                )
        );
 
        menu.setBackgroundColor(0xFF333333);
        menu.setSelectorDrawable(R.drawable.side_menu_items_background);
 
        this.menu = menu;
    }
    public void menuToggle(){
        if(menu.isMenuShowing()) menu.showContent();
        else menu.showMenu();
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
 
        //noinspection SimplifiableIfStatement
        if (id == R.id.action_search) {
 
        }
 
        if (id == R.id.action_side_menu) {
            menuToggle();
            return true;
        }
 
        if(id == R.id.action_communication){
            startActivity(new Intent(this,CommunicationActivity.class));
        }
 
        return super.onOptionsItemSelected(item);
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.12.2014, 18:25
Ответы с готовыми решениями:

Navigation Drawer Menu: можно ли использовать activity?
В Navigation Drawer Menu используются только фрагменты или можно обычными Активитями пользоваться?...

Navigation drawer
Как так подключить navigation drawer чтобы он был доступен не в одном а во всех или в нескольких...

Navigation Drawer
помогите найти ошибку. код главного активити package ua.com.cls; import...

Navigation drawer
Скажите, как сделать так чтобы при открытии другого activity, navigation drawer можно было так же...

0
16.12.2014, 18:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2014, 18:25
Помогаю со студенческими работами здесь

Navigation Drawer
Всем привет. Подскажите в чем может быть проблема. Создал Navigation Drawer по этому примеру....

Navigation Drawer
Пытаюсь разобраться с Navigation Drawer. Делаю по гайду...

Navigation Drawer не работает
только начал программировать. делал navigation draver по инструкции на хабре. при запуске...

Добавление navigation drawer
Привет, есть приложение со множеством активити... нужно запихнуть в него navigation drawer c...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru