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

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

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

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

16.12.2014, 18:25. Просмотров 375. Ответов 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
Посмотрите здесь:

Navigation Drawer или ViewPager Android
Падает программа Navigation Drawer Android
Navigation Drawer - ошибка Android
Android Navigation Drawer не работает
Navigation Drawer Android
Navigation Drawer Android
Navigation drawer Android
Android Navigation drawer
Android Сдвинуть 3 палочки Navigation drawer
Android Navigation Drawer
Android Добавление navigation drawer
Android Drawer Navigation and MenuItem

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

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

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