Как создать пользовательский ActionBar с навигационным ящиком

Привет, я хочу создать пользовательский ActionBar с ящиком для навигации в моем приложении. В том, что я хочу показать лицо человека, который вошел в мое приложение внутри круга в правой части. И панель навигации слева.

Введите описание изображения здесь ,

Раньше он не работал с навигационным ящиком.

@Manikandan Попробуйте:

Первое, что вам нужно сделать, это реализовать и создать навигационный ящик:

/res/layout/activity_main.xml

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" > <!-- menu--> <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" /> <!-- slide menu --> <ListView android:id="@+id/left_drawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:background="#111" android:choiceMode="singleChoice" /> </android.support.v4.widget.DrawerLayout> 

MainActivity.java

 public class MainActivity extends ActionBarActivity { private String[] optionsMenu; private DrawerLayout drawerLayout; private ListView drawerList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); opcionesMenu = new String[] {"Option 1", "Option 2", "Option 3"}; drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); drawerList = (ListView) findViewById(R.id.left_drawer); drawerList.setAdapter(new ArrayAdapter<String>( getSupportActionBar().getThemedContext(), android.R.layout.simple_list_item_1, optionssMenu)); } //... } 

Для каждого элемента в вашем меню navigationDrawer вам нужно добавить один макет и один фрагмент.

Fragment_1.xml (или другие элементы в меню, фрагмент_2, фрагмент_3 ….)

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/TxtDetalle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/fragment1" /> </LinearLayout> 

И связанный с ним класс для каждого FragmentLayout

Fragment1.java (фрагмент2, фрагмент3, фрагмент4 …)

 import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class Fragment1 extends Fragment { @Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_1, container, false); } } 

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

Это делается путем реализации элемента управления событиями onItemClick ListView, логика добавляется в конец метода onCreate () нашего основного бизнеса.

 @Override protected void onCreate(Bundle savedInstanceState) { //... drawerList.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { Fragment fragment = null; switch (position) { case 1: fragment = new Fragment1(); break; case 2: fragment = new Fragment2(); break; case 3: fragment = new Fragment3(); break; } FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction() .replace(R.id.content_frame, fragment) .commit(); drawerList.setItemChecked(position, true); tituloSeccion = opcionesMenu[position]; getSupportActionBar().setTitle(tituloSeccion); drawerLayout.closeDrawer(drawerList); } }); } 

Хорошо, мы внедрили базовую функциональность, теперь я собираюсь добавить открытую и закрытую иконку.

На MainActivity.

 @Override protected void onCreate(Bundle savedInstanceState) { //... tituloApp = getTitle(); drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.drawable.ic_navigation_drawer, R.string.drawer_open, R.string.drawer_close) { public void onDrawerClosed(View view) { getSupportActionBar().setTitle(tituloSeccion); ActivityCompat.invalidateOptionsMenu(MainActivity.this); } public void onDrawerOpened(View drawerView) { getSupportActionBar().setTitle(tituloApp); ActivityCompat.invalidateOptionsMenu(MainActivity.this); } }; drawerLayout.setDrawerListener(drawerToggle); } 

Теперь мы добавим кнопки на ActionBar (по вашему образ пользователю) *

На вашей главной

 @Override public boolean onPrepareOptionsMenu(Menu menu) { boolean menuAbierto = drawerLayout.isDrawerOpen(drawerList); if(menuAbierto) menu.findItem(R.id.action_search).setVisible(false); else menu.findItem(R.id.action_search).setVisible(true); return super.onPrepareOptionsMenu(menu); } 

При этом мы отвечаем большинству рекомендаций руководства по дизайну, но мы все же разрешаем пользователю открывать его, щелкнув значок приложения в меню панели действий.

Для этого в конце метода onCreate () будет квалифицироваться пульсация вызова setDisplayHomeAsUpEnabled icon () и setHomeButtonEnabled () и добавить событие onOptionsItemSelected () (отвечающее за обработку нажатий клавиш на панели действий, первоначальный вызов метода onOptionsItemSelected () Объекта ActionBarDrawerToggle, созданного выше, поэтому, если он возвращает true (означает, что кто-то нажал на значок приложения), он напрямую выходит из этого метода.

MainActivity тоже

 public void onCreate(Bundle savedInstanceState) { //... getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (mDrawerToggle.onOptionsItemSelected(item)) { return true; } //... } 

Последний для финиша добавьте этот метод:

 @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); drawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); drawerToggle.onConfigurationChanged(newConfig); } 

РЕДАКТИРОВАТЬ ВСЕ ПРОЕКТ:

https://github.com/sgolivernet/curso-android-src/tree/develop/android-navigationdrawer

Вы можете добавить пользовательский вид в панель действий

 final ActionBar actionBar = getActionBar(); actionBar.setCustomView(R.layout.actionbar_custom_view_home); 

Добавьте свой образ ImageView и название, которое вы хотите

getSupportActionBar () setDisplayShowHomeEnabled (ложь). getSupportActionBar () setDisplayShowTitleEnabled (ложь).

  LayoutInflater mInflater = LayoutInflater.from(this); View mCustomView = mInflater.inflate(R.layout.custom_action_bar_back, null); getSupportActionBar().setCustomView(mCustomView); getSupportActionBar().setDisplayShowCustomEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
Intereting Posts
Geo fix для Android-эмулятора не может установить местоположение gps Padding / Space Application bar между значком и заголовком (Android 24) Как я могу отправить серверу (Google App Engine, Cloud Endpoints) информацию моему клиенту? Что лучше использовать, массив hardcoded array или resource string? Phonegap InAppBrowser – кнопка возврата не переходит на предыдущую страницу Многострочный редактор Android не увеличивает его высоту по типу пользователя Увеличить интервал сетки в android Запрос с автоматическим или пользовательским выбором соответствующего клиентского сертификата Могу ли я запустить службу из приложения # onCreate ()? Отправка электронной почты с несколькими вложениями Андроид Google плюс настройка входа в систему Как сохранить и восстановить состояние веб-просмотра? В карте Google api v2 отображается пустой экран с кнопками масштабирования на эмуляторе Google Glass: GDK с Android Studio Фоновые процессы случайным образом умирают, когда приложение работает на Samsung S3