Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

Navigation Drawer - Программирование Android
помогите найти ошибку. код главного активити package ua.com.cls; import android.annotation.SuppressLint; import...

Navigation Drawer - Программирование Android
Всем привет. Подскажите в чем может быть проблема. Создал Navigation Drawer по этому примеру. http://habrahabr.ru/post/250765/ добавил туда...

Navigation Drawer - Программирование Android
Пытаюсь разобраться с Navigation Drawer. Делаю по гайду https://github.com/codepath/android_guides/wiki/Fragment-Navigation-Drawer и в...

Navigation drawer - Программирование Android
Скажите, как сделать так чтобы при открытии другого activity, navigation drawer можно было так же с левой стороны на экране вызвать? При...

Navigation drawer - Программирование Android
Как так подключить navigation drawer чтобы он был доступен не в одном а во всех или в нескольких активити приложения и во всех этих...

Стилизация Navigation Drawer - Программирование Android
Приложение вылетает при открытии, если применяю свой xml-файл для стилизации. Пробую стандартный файл стилизации - все хорошо. Проблему...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2014, 18:25
Привет! Вот еще темы с ответами:

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

Navigation Drawer не работает - Программирование Android
только начал программировать. делал navigation draver по инструкции на хабре. при запуске приложение просто вылетает, а в логах такая...

Drawer Navigation and MenuItem - Программирование Android
Добрый вечер. Вот такая проблема возникла. Вот в MainActivity есть Выдвижное меню(Drawer Navigation) и правое дополнительное меню...

Navigation Drawer - ошибка - Программирование Android
Возникает ошибка при установке drawerListener public class MainActivity extends Activity { String email; DrawerLayout...


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

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

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