Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Toggle Button Navigation Drawer

Olá boa noite, a minha dúvida não está muito relacionada ao escopo do curso, porém eu já pesquisei muito e não achei nenhuma solução que ajude 100%. Se vocês puderem me ajudar, ficarei muito grato.

Eu to criando um projeto do zero, e estou escolhendo a opção de Navigation Drawer Activity, e dessa forma é gerado automaticamente o Toggle Button, que é responsável por mostrar e esconder a navigation view. E é ai que justamente está meu problema, eu quero personalizar esse Toggle Button (Home Button), de uma forma que cada item da navigation view que eu escolher, ele ficasse de uma cor, e a toolbar também mudasse de cor.

Estou trabalhando com fragments, ou seja, no menu lateral da esquerda (Navigation View), ao clicar em um dos itens da Navigation View, ele chama um fragment diferente, e por consequência quero que esse clique mude o toogle button, ou mude a sua cor, ou eu consiga colocar um novo icone no lugar.

Desde já. Agradeço

5 respostas

Oi Thiago, tudo bem ?

Acredito que você consiga trocar as cores da sua ActionBar dentro de cada fragment assim que eles forem exibidos.

Só não entendi muito bem a outra parte que você quer trocar as cores, consegue explicar um pouco melhor para eu tentar te ajudar ?

Olá Matheus boa noite, desculpa eu escrevi rápido e acabei não sabendo explicar direito. Então, eu criei um novo projeto no Android Studio, e escolhi o layout Navigation Drawer Activity, e o Android Studio gerou automaticamente o seguinte código, da MainActivity:

package com.devandroid.testetooglebutton;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.view.View;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {

    Toolbar toolbar;
    public ActionBarDrawerToggle toggle;


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

        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();
            }
        });

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        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);
    }

    @Override
    public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.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);
    }

    @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        if (id == R.id.nav_camera) {

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

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

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

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

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

        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
}

Esse código gera um NavigationView na lateral esquerda da tela, certo? Essa NavigationView aparece e se esconde no clique do botão home (ToggleButton), e é justamente esse botão que eu quero personalizar (por padrão são 3 listras na horizontal), dessa forma eu quero colocar outro ícone, no lugar. Como eu faço isso? Pois já procurei esse botão no meu xml e não o encontro.

Por exemplo, eu consigo mudar a cor da Toolbar em tempo de execução usando toolbar.setBackground(), e gostaria de mudar da mesma forma esse botão, ou em tempo de execução ou no xml mesmo.

Desde já agradeço

solução!

Oi Thiago, tudo bem ?

Você consegue trocar o item sim :

toolbar.setNavigationIcon(drawable);

Ai toda vez que você fizer um click basta invocar esse método, contudo você irá precisar pegar a toolbar.

Resolveu o problema, muito obrigado!

O que precisar abre um novo tópico agora !

Estarei a disposição..

Abraços e bons estudos

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software