Вы находитесь на странице: 1из 21

PROGRAMAO

ANDROID
Menu deslizante

Universidade Federal de Sergipe


Departamento de Sistemas de Informao
Prof. Andrs Menndez
ammenendez@gmail.com
Menu
O menu que foi apresentado anteriormente bastante
simples e funcional
Contudo, menus mais elaborados foram inseridos nos
apps nos ltimos anos
O Android Studio permite criar facilmente um menu
deslizante com um conjunto de opes por meio de um
template
Menu
Vejamos na figura ao lado
como o Android Studio
gera um menu de opes
usando o template de
Navigation Drawer Activity
Menu
Vamos inicialmente deixar que o Android Studio gere
todos os arquivos necessrios e depois analisaremos
cada item que foi gerado
Muitos elementos novos sero mostrados
Menu
Vamos comear vendo os layouts que foram gerados
Na figura podemos ver quatro layouts
Activity_main
App_bar_main
Content_main
Nav_header_main
Nav_header_main
Este layout mostra a parte de cima do menu, como pode
ser visto na figura abaixo
Uma detalhe o background
@drawable/side_nav_bar
Este arquivo xml que permite criar efeitos, como
gradientes e cantos arredondados
Veja que, neste caso, foi criado uma cor de gradiente que
foi utilizado no background nav_header_main

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="135"
android:centerColor="#4CAF50"
android:endColor="#2E7D32"
android:startColor="#81C784"
android:type="linear" />
</shape>
Content_main
Este o arquivo onde sero adicionados os elementos
visuais da activity
Ela ser incorporada em app_bar_main
App_bar_main
Activity_main
Finalmente temos a activity_main que incorpora todos os
elementos
Arquivos de menus
Alm dos layouts, temos dois outros arquivos para os
menus
O primeiro deles j falamos anteriormente, que o
ActionBar, contido no arquivo menu.xml

<?xml version="1.0" encoding="utf-8"?>


<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:title="@string/action_settings"
app:showAsAction="never" />
</menu>
Arquivos de menus
O arquivo activity_main_drawer define os elementos do
menu deslizante
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_camera"
android:icon="@drawable/ic_menu_camera"
android:title="Import" />
<item
android:id="@+id/nav_gallery"
android:icon="@drawable/ic_menu_gallery"
android:title="Gallery" />
<item
android:id="@+id/nav_slideshow"
android:icon="@drawable/ic_menu_slideshow"
android:title="Slideshow" />
<item
android:id="@+id/nav_manage"
android:icon="@drawable/ic_menu_manage"
android:title="Tools" />
</group>
cones
Vejamos um dos cones que esto na pasta drawable
Como podemos adicionar um cone dessa forma?

<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24.0"
android:viewportWidth="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M12,12m-3.2,0a3.2,3.2 0,1 1,6.4 0a3.2,3.2 0,1 1,-6.4 0" />
<path
android:fillColor="#FF000000"
android:pathData="M9,2L7.17,4H4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2
2,2h16c1.1,0 2,-0.9 2,-2V6c0,-1.1 -0.9,-2 -2,-2h-3.17L15,2H9zm3,15c-2.76,0 -5,-2.24
-5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5z" />
</vector>
cones
V na opo New, clicando com o
boto direito sobre o projeto, e
escolha Vector Asset
Depois clique na opo Choose e
escolha o cone desejado
Por fim, d um nome seguindo a
padronizao
Classe Java
A classe Java gerada tem elementos que no esto
diretamente relacionados com o menu, como os que
esto mostrados abaixo

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);


fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action",
Snackbar.LENGTH_LONG).setAction("Action", null).show();
}
});
Classe Java
Vejamos o mtodo onCreate()

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);


ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open,
R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);


navigationView.setNavigationItemSelectedListener(this);
}
Classe Java
Vejamos o mtodo onBackPressed()

@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
Classe Java
Vejamos o mtodo que permite escolher as aes
atreladas a cada um dos elementos
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.nav_camera) {
// Cdigo disparado pelo click no elemento
} else if (id == R.id.nav_gallery) {

} else if (id == R.id.nav_slideshow) {

...

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);


drawer.closeDrawer(GravityCompat.START);
return true;
}
Ainda sobre Menu
O que voc acha que vai acontecer se a gente adicionar
uma nova activity e ela for invocada a partir de um dos
itens do Menu?

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();

if (id == R.id.nav_camera) {
Intent intent = new Intent(MainActivity.this, NovaActivity.class);
startActivity(intent);
} else if (id == R.id.nav_gallery) {

...
Ainda sobre Menu
Sumiu....
Ainda sobre Menu
Qual seria uma soluo?

Podemos usar apenas uma activity e adicionar


Fragmentos em tempo de execuo

Вам также может понравиться