Привет, я хочу создать пользовательский 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);