Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Программное заполнение Navigation Drawer

Задача - вывести в Navigation Drawer стандартного шаблона список доступных датчиков устройства. Каким образом программно можно добавлять пункты меню в Дровер? По умолчанию стандартный шаблон подхватывает пункты из дирриктории res/menu/activity_menu_drawer.xml.
Ответ: Mikalai, спасибо, попробую.
Вопрос: Создание справочника с Navigation Drawer на Android Studio

Всем привет. Поставил себе задачу создать справочник о замках и др. достопримечательности в Андроид Студио. Уровень программирования равен нулю, поэтому за готовый шаблон взял Navigation Drawer. С чего начать работу?
Возможно кто-нибудь разбирается в Студио и может помочь. Буду очень благодарен.
Ответ: Delphi_user, сделать элемент под названием WebView. В него и грузить веб-страницы. Там ещё нужно сделать дополнительные действия (разрешить программно JS и DOM).
Вопрос: Добавление navigation drawer

Привет, есть приложение со множеством активити... нужно запихнуть в него navigation drawer c иконками и текстом к ним. И у меня почти это удалось, но не знаю , как прикрепить иконки к тексту... от части копи-пастил поэтому прошу помощи, куда и как закрепить иконки к тексту из меню one two three ?
вот Main
Java(TM) 2 Platform Standard Edition 5.0
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
 
 
/**
 * Created by vklamm on 31.03.2016.
 */
public class Settings extends AppCompatActivity {
 
    private String[] mPlanetTitles;
    private DrawerLayout mDrawerLayout;
    private ListView mDrawerList;
    private ActionBarDrawerToggle mDrawerToggle;
 
    //declarations
 
    //Edittext fields for username , server, password & port information
    EditText edtIpurl, edtPort, edtUsername, edtPassword;
    //Textviews that can be clicked
    TextView databaseDel, databaseRef, magnumgmbh, contact, support;
    //imagebuttons for bottom menu
    ImageButton contacts, articles, invoices, orders;
    //string for server URL
    static String serverURL = "http://", port = ":", username = "", password ="";
    Thread newSettingsThread;
    static boolean hasVisited = false;
    SharedPreferences sp;
    static String MP = "MyPrefs";
    static String APS = "sURL", APP = "sport", APU = "uname", APPass = "pass";
 
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);
 
        setTitle("Settings");
 
        
        mPlanetTitles = new String[]{"one", "two", "three"};
        mDrawerLayout = (DrawerLayout) findViewById(R.id.dl);
        mDrawerList = (ListView) findViewById(R.id.left_drawer);
 
 
 
 
        // Set the adapter for the list view
        //mDrawerList.setAdapter(new ArrayAdapter<String>(this,
        //        R.layout.drawer_list_item, mPlanetTitles));
        mDrawerList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mPlanetTitles));
        // Set the list's click listener
        mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
 
 
 
 
 
        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.drawer_open, R.string.drawer_close) {
 
            /** Called when a drawer has settled in a completely closed state. */
            public void onDrawerClosed(View view) {
                // set name if drawer closes
                //getSupportActionBar().setTitle("Settings");
                //invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
            }
 
            /** Called when a drawer has settled in a completely open state. */
            public void onDrawerOpened(View drawerView) {
                //set name if drawer opens
                //getSupportActionBar().setTitle("Choose options");
                //invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
            }
 
        };
 
        // Set the drawer toggle as the DrawerListener
        mDrawerLayout.setDrawerListener(mDrawerToggle);
 
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);
 
 
        mDrawerList.bringToFront();
        mDrawerLayout.requestLayout();
 
        mDrawerToggle.isDrawerIndicatorEnabled();
 
 
 
 
 
 
    }
 
    /*
    @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
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        // Sync the toggle state after onRestoreInstanceState has occurred.
        mDrawerToggle.syncState();
    }
 
 
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        mDrawerToggle.onConfigurationChanged(newConfig);
        Toast.makeText(Settings.this, "Drawer 2",
                Toast.LENGTH_SHORT).show();
    }
 
    //if u clicked on ||| or <- sign
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Pass the event to ActionBarDrawerToggle, if it returns
        // true, then it has handled the app icon touch event
        if (mDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }
        Toast.makeText(Settings.this, "just call under the number +4917620279876 if you see it",
                Toast.LENGTH_LONG).show();
        // Handle your other action bar items...
 
        return super.onOptionsItemSelected(item);
    }
 
    /**
     * Swaps fragments in the main content view
     */
    private void selectItem(int position) {
        // Highlight the selected item, update the title, and close the drawer
        mDrawerList.setItemChecked(position, true);
        //setTitle(mPlanetTitles[position]);
        mDrawerLayout.closeDrawer(mDrawerList);
    }
 
/* set title
    @Override
    public void setTitle(CharSequence title) {
        mTitle = title;
        getSupportActionBar().setTitle(mTitle);
        Toast.makeText(Settings.this, "Drawer 6",
                Toast.LENGTH_SHORT).show();
    }
*/
 
    private class DrawerItemClickListener implements ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView parent, View view, int position, long id) {
            selectItem(position);
 
            String positions = parent.getAdapter().getItem(position).toString();
            int p = position;
 
            switch (p){
                case 0:
                    Toast.makeText(Settings.this, "0", Toast.LENGTH_SHORT).show();
                    break;
                case 1:
                    Toast.makeText(Settings.this, "1", Toast.LENGTH_SHORT).show();
                    break;
                default :
                    Toast.makeText(Settings.this, "3", Toast.LENGTH_SHORT).show();
            }
 
 
        }
    }
}
это XML к нему
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/dl">
 
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    <!-- The navigation drawer -->
    <ListView
        android:id="@+id/left_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp"
        android:background="@color/grayBackground"/>
 
</android.support.v4.widget.DrawerLayout>
тут я так понимаю будет лежать текст из боковой меню
XML
1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/activated_background"
    android:gravity="center_vertical"
    android:minHeight="?attr/listPreferredItemHeightSmall"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:textColor="#fff" />
тут цвет при нажатии на Item из меню
XML
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 
    <item android:drawable="@color/green" android:state_activated="true"/>
    <item android:drawable="@color/green" android:state_selected="true"/>
    <item android:drawable="@color/green" android:state_pressed="true"/>
    <item android:drawable="@color/green" android:state_checked="true"/>
    <item android:drawable="@android:color/transparent"/>
 
</selector>
некие strings.xml
XML
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="refresh_button">refresh_button</string>
    <string name="prev_button">prev</string>
 
 
    <string name="drawer_open">Open</string>
    <string name="drawer_close">Close</string>
</resources>
Ответ:
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
menuItem.setImageId(R.drawable.contacts);
        menuItem.setTitle("Addresses");
        menuItems.add(menuItem);
        menuItem.setImageId(R.drawable.articles);
        menuItem.setTitle("Articles");
        menuItems.add(menuItem);
        menuItem.setImageId(R.drawable.invoices);
        menuItem.setTitle("Invoices");
        menuItems.add(menuItem);
        menuItem.setImageId(R.drawable.orders);
        menuItem.setTitle("Orders");
        menuItems.add(menuItem);
        menuItem.setImageId(R.drawable.settings);
        menuItem.setTitle("Settings");
        menuItems.add(menuItem);


вместо всего этого это попробуйте.

Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
 String[] titles = {"Addresses", "Articles", "Invoices","Orders","Settings"};
        Integer[] images = {R.drawable.contacts,R.drawable.articles,R.drawable.invoices,R.drawable.orders,R.drawable.settings};
        for(int i=0;i<5;i++){
            MenuItem menuItem = new MenuItem();
            menuItem.setTitle(titles[i]);
            menuItem.setImageId(images[i]);
            menuItems.add(menuItem);
}
        
mDrawerList.setAdapter(new MyAdapter(this, R.layout.drawer_list_item, menuItems));
Вопрос: Navigation drawer на многих activity

На б*длокодил от балды не смотря а может уже есть готовое решение:?)

Скажите ли так вобще можно, или срочно нужно уничтожить код по быстрее?)

Сначало было 2 активити, мне понадобилось что бы на обох было одно и то же navigation drawer(боковое выпадающее меню)
при создании 2рого активити выбрал(базовый активити) при етом заменил весь activity_file.xml скопированый с главной
при етом изменив адрес(копия апп бара главной страницы)
XML
1
2
<include
        layout="@layout/app_bar_file"
только заменив при этом в файле апп бара
XML
1
 <include layout="@layout/content_file" />
и вуаля осталось только сделать общий список меню

Java
1
2
3
4
5
6
7
8
9
10
@Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();
        Helpers.navigationDraver(getBaseContext(),id);
 
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
а вот и отдельный кусок для того что бы брать для всех navigation drawer
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Helpers {
    public static void  navigationDraver(Context context, int id)
    {
        int resId;
        if (id == R.id.home) {
            Intent intent = new Intent(context, MainActivity.class);
            context.startActivity(intent);
        } else if (id == R.id.private_office) {
            Intent intent = new Intent(context, private_office.class);
            context.startActivity(intent);
        } else if (id == R.id.nav_slideshow) {
 
        } else if (id == R.id.nav_manage) {
 
        }
 
    }
}
очень страшный грех сотворил я? поведайте мне насколько страшен етот велосипед? сойдет оставить так как есть:?)(все норм работает)
Ответ:
Сообщение от korshun84
А фрагменты использовать религия не позволяет или что ?
собственное невежество разве что
Вопрос: Смена activity в Navigation Drawer

Буду в очередной раз оправдывать свой ник.

Суть вопроса - распишите по полочкам как сменить activity.

В Android Studio создаю стандартный проект с Navigation Drawer.

Создаю класс Edit (соответственно создается activity_edit.xml в res/layout/). В activity_edit.xml прописываю в заголовке android:id="@+id/activity_edit". Еще добавляю туда две кнопки (им так же прописываю id).

Теперь в MainActivity.class в секцию if else дописываю:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();
 
        if (id == R.id.Operations) {
            // Handle the camera action
        } else if (id == R.id.Reports) {
 
        } else if (id == R.id.Settings) {
            setContentView(R.layout.activity_edit);
        } else if (id == R.id.About) {
 
        }
 
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
В итоге при нажатии на пункт Settings на телефоне\эмуляторе получаю ошибку

E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NullPointerException
at com.lexfall.purse.MainWindow.onNavigationItemSelected(MainActivity.java:85)


Соответственно ругается на 85 строку, а именно

Java
1
        drawer.closeDrawer(GravityCompat.START);
Подскажите в чем дело?

P.S. Без фрагментов. Интересует почему у меня не получается просто заменить одно activity на другое и как всё же надо сплясать с бубном что бы нормально всё работало.
Ответ: Ок, спасибо.
Вопрос: Переход на другие активности из Navigation Drawer

Добрый день. Столкнулся с проблемой после того как прочитал статью на хабре о том как можно просто создать Navigation Drawer в стиле MaterialDesign. И просто банально не пойму как сделать переход из этих опций (начинается, где NewDrawer) на другие активности.
Статья из хабра:
Main Activity:

Код Java(TM) 2 Platform Standard Edition 5.0
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
package com.example.darling.my_training;
 
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
 
import com.mikepenz.iconics.typeface.FontAwesome;
import com.mikepenz.materialdrawer.Drawer;
import com.mikepenz.materialdrawer.model.DividerDrawerItem;
import com.mikepenz.materialdrawer.model.PrimaryDrawerItem;
import com.mikepenz.materialdrawer.model.SecondaryDrawerItem;
import com.mikepenz.materialdrawer.model.SectionDrawerItem;
 
public class MainActivity extends ActionBarActivity {
 
    private Toolbar mActionBar;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mActionBar = (Toolbar) findViewById(R.id.action_bar);
        mActionBar.setTitle("Works");
        setSupportActionBar(mActionBar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 
        new Drawer()
                .withActivity(this)
                .withToolbar(mActionBar)
                .withActionBarDrawerToggle(true)
                .withHeader(R.layout.drawer_header)
                .addDrawerItems(
                        new PrimaryDrawerItem().withName(R.string.drawer_work).withIdentifier(1),
                        new PrimaryDrawerItem().withName(R.string.drawer_stats),
                        new PrimaryDrawerItem().withName(R.string.drawer_food).withIdentifier(2),
                        new SectionDrawerItem().withName(R.string.drawer_other),
                        new SecondaryDrawerItem().withName(R.string.drawer_profile),
                        new SecondaryDrawerItem().withName(R.string.drawer_about).setEnabled(false),
                        new DividerDrawerItem(),
                        new SecondaryDrawerItem().withName(R.string.drawer_rate_us).withIdentifier(1)
                )
                .build();
    }
 
    @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_settings) {
            return true;
        }
 
        return super.onOptionsItemSelected(item);
    }
}
Ответ: Возможно чем то поможет
Вопрос: Android Studio - Navigation Drawer Activity, многостраничное

Всем доброго времени суток)
Справедливости ради, хочу сказать, что я не сразу стал создавать тему, столкнувшись с проблемой. Два дня я искал по различным видеоурокам и сайтам ее решение, но безрезультатно( Поэтому прошу Вашей помощи, форумчане.

С Navigation Drawer Activity вроде все понятно. С фрагментами (пунктами навигации) тоже вроде ясно. Но у меня многостраничное приложение, поэтому столкнулся с проблемой. Если создавать новое Navigation Drawer Activity, то студия ругается, что мол меню навигации уже есть. Оно и логично.
А если приложение многостраничное, то как на каждой странице вставить меню? Создал Empty Activity, попробовал вставить меню (android.support.design.widget.NavigationView + include), но что-то не вышло. В app_bar_activity нужно include content_xxx. Это то есть, на всех страницах, где я захочу вставить меню, мне придется создавать по два активити на страницу? Просто активити и контент?

Может и вопрос глупый, и мое описание тоже, поэтому просто напишу суть: Как создать, n-страничное приложение, и чтобы на каждой странице было одно и то же меню?
Ответ: Пробовал прописывать import android.support.v4.app.Fragment, не помогло

Добавлено через 1 час 44 минуты
Решил проблему. Надо было во фрагменте исправить import android.support.v4.app.Fragment; на import android.app.Fragment;
Вопрос: Приложение падает когда шапка Navigation Drawer Activity пропадает из виду

В моей программе используется Navigation Drawer Activity и в нем много пунктов меню. И поэтому как только шапка Navigation Drawer Activity пропадает из виду, приложение выдает сообщение об ошибке и закрывается. Тестирую приложение на своем телефоне android 5.1 Буду рад помощи.
Ответ: о все работает, забыл приложение удалить и заново поставить

Добавлено через 19 секунд
спасибо вам за внимание!!!
Вопрос: Как в navigation drawer activity засунуть активити

Здравствуйте! у меня такая проблема navigation drawer activity работает только с фрагментами как мне засунуть активити во фрагмент и открыть его через меню
Ответ: никак
Вопрос: Общий Navigation Drawer для нескольких окон

Привет всем,
как можно переключаться между окнами имея один общий Navigation Drawer и не используя фрагменты ?

Android Studio 2.2.3
Ответ:
Сообщение от Ksar13th
если нужно вывести одно и тоже в двух разных активити на двух разных местах
Сообщение от Паблито
писать свои вьюшки (по сути велосипед)
но это будет красивее чем эти упоротые фрагменты

Сообщение от Ksar13th
просто сделать одно активити с дровером, и унаследовать все прочие активити, где дровер нужен, от него. И переключаться - открывать новое активити на вершине стека, убивая все предыдущие. Но, повторюсь, я не пробовал ещё.
идея не очень...очень не очень

Сообщение от Ksar13th
Но если есть дровер и не хочется использовать фрагменты, то в природе есть архитектура на разных активити с единым дровером, пример которой и просит автор темы.
нет такой в природе
дровер придется лепить в разметке каждой активити