Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
BigApple
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 35
#1

Конфликт между Navigation Drawer и Side Menu - Программирование Android

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

Доброе время суток, форумчане! Нужна ваша помощь! 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);
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2014, 18:25     Конфликт между Navigation Drawer и Side Menu
Посмотрите здесь:

Смена activity в Navigation Drawer - Программирование Android
Буду в очередной раз оправдывать свой ник. Суть вопроса - распишите по полочкам как сменить activity. В Android Studio создаю...

Падает программа Navigation Drawer - Программирование Android
Собрал пример этот бокового меню http://developer.android.com/intl/ru/training/implementing-navigation/nav-drawer.html на планшете...

Сдвинуть 3 палочки Navigation drawer - Программирование Android
по умолчанию 3 палочки для открытия nav drawer находятся в верхнем левом углу(в Tool Barе). Как сместить эти три палочки вправо на...

Navigation Drawer OnClick Событие - Программирование Android
Подскажите плз, как делать онклик событие для драуера... Гугл нашел че то - не сработало...

Navigation drawer на многих activity - Программирование Android
На б*длокодил от балды не смотря а может уже есть готовое решение:?) Скажите ли так вобще можно, или срочно нужно уничтожить код по...

Программное заполнение Navigation Drawer - Программирование Android
Задача - вывести в Navigation Drawer стандартного шаблона список доступных датчиков устройства. Каким образом программно можно добавлять...

Navigation Drawer или ViewPager - Программирование Android
Привет! Обращаюсь за советом. С помощью чего можно сделать аналог Navigation Drawer, но так чтобы при его закрытии DrawerLayout...

Переход на другие активности из Navigation Drawer - Программирование Android
Добрый день. Столкнулся с проблемой после того как прочитал статью на хабре о том как можно просто создать Navigation Drawer в стиле...

Боковое меню (Navigation Drawer) в ListFragment - Программирование Android
Вообщем нужно реализовать данный паттерн в ListFragment, и возникли некоторые вопросы. XML файл для реализации меню обрабатывается в...

Создание справочника с Navigation Drawer на Android Studio - Программирование Android
Всем привет. Поставил себе задачу создать справочник о замках и др. достопримечательности в Андроид Студио. Уровень программирования равен...

Как в navigation drawer activity засунуть активити - Программирование Android
Здравствуйте! у меня такая проблема navigation drawer activity работает только с фрагментами как мне засунуть активити во фрагмент и...

Подскажите как реализовать задачу с Navigation Drawer - Программирование Android
Снова всем привет.очередной ламерский вопрос. Есть один активити, в нем я реализовал получение с кнопки операнда или оператора.Т.е. в...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru