2014-11-13 16 views
21

Sto tentando di aggiungere una vista personalizzata alla nuova barra degli strumenti (Lollipop). Ma in qualche modo la vista viene aggiunta sotto la barra degli strumenti. Funzionava bene quando ho usato actionBar.setCustomView ma ora dopo la migrazione alla barra degli strumenti, non funziona. Di seguito è riportato il codice. Quali cambiamenti dovrebbero essere fatti?Aggiunta di una vista personalizzata a una barra degli strumenti

Frammento:

toolbar = (Toolbar) getView().findViewById(R.id.toolbar); 
    ((ActionBarActivity) getActivity()).setSupportActionBar(toolbar); 

    toolbar.setTitle(getString(R.string.app)); 



    ActionBar actionBar = ((ActionBarActivity) getActivity()) 
      .getSupportActionBar(); 

    actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 

    LayoutInflater inflater = (LayoutInflater) getActivity() 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    // inflate the view 
    final View view = inflater.inflate(R.layout.actionbar_search, null); 
    final ImageView searchIcon = (ImageView) view 
      .findViewById(R.id.search_icon); 
    final ClearableAutoCompleteTextView searchBox = (ClearableAutoCompleteTextView) view 
      .findViewById(R.id.search_box); 

    // start with the text view hidden in the action bar 
    searchBox.setVisibility(View.INVISIBLE); 
    searchIcon.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      toggleSearch(false, view); 
     } 
    }); 

    searchBox.setOnClearListener(new OnClearListener() { 

     @Override 
     public void onClear() { 
      toggleSearch(true, view); 
     } 
    }); 

    searchBox.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 


     } 

    }); 

toolbar.addView(view);    
// actionBar.setCustomView(view); // This worked previously 
//((ActionBarActivity)getActivity()).getSupportActionBar().setCustomView(view); //doesnt work with toolbar 

risposta

40

Con barra degli strumenti sono riuscito a raggiungere questo obiettivo in questo modo:

setSupportActionBar(toolbar); 
    View logo = getLayoutInflater().inflate(R.layout.view_logo, null); 
    toolbar.addView(logo); 

Oppure si può anche aggiungere appena l'immagine per il xml barra degli strumenti, in quanto è solo un ViewGroup . In questo modo avrai l'anteprima nell'editor di layout. Non è richiesto alcun codice java.

+6

Ho provato a utilizzare l'appcompat 'Toolbar.addView()' ma non funziona. – patrickjason91

+1

Non funziona anche per me –

+0

^prova a rimuovere il setSupportActionBar() – Clocker

8

Funziona alla grande per me.

LayoutInflater mInflater=LayoutInflater.from(context); 
View mCustomView = mInflater.inflate(R.layout.toolbar_custom_view, null); 
toolbar.addView(mCustomView); 
1

Basta gonfiare la vista che si desidera aggiungere passando la vista della barra degli strumenti come secondo parametro del metodo di gonfiaggio; In questo modo la chiamata a "addView" non è necessaria:

setSupportActionBar(toolbar); 
View logo = getLayoutInflater().inflate(R.layout.view_logo, toolbar); 
Problemi correlati