In realtà, è abbastanza facile (anche se è poco hacky) da fare. In primo luogo, creare un drawable per pulsante indietro (preferibilmente - come selettore, distinguere premuto/stato normale:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/back_button_pressed"/>
<item android:drawable="@drawable/back_button"/>
</selector>
successivo, impostare questa drawable al logo della barra degli strumenti toolbar.setLogo(R.drawable.back_button_selector);
Allora l'unica cosa a sinistra è quello di impostare click-ascoltatore
View logoView = getToolbarLogoIcon(toolbar);
logoView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
...
private View getToolbarLogoIcon(Toolbar toolbar){
//check if contentDescription previously was set
boolean hadContentDescription = android.text.TextUtils.isEmpty(toolbar.getLogoDescription());
String contentDescription = String.valueOf(!hadContentDescription ? toolbar.getLogoDescription() : "logoContentDescription");
toolbar.setLogoDescription(contentDescription);
ArrayList<View> potentialViews = new ArrayList<>();
//find the view based on it's content description, set programatically or with android:contentDescription
toolbar.findViewsWithText(potentialViews,contentDescription, View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION);
//Nav icon is always instantiated at this point because calling setLogoDescription ensures its existence
View logoIcon = null;
if (potentialViews.size() > 0) {
logoIcon = potentialViews.get(0);
}
//Clear content description if not previously present
if (hadContentDescription) {
toolbar.setLogoDescription(null);
}
return logoIcon;
}
(Grazie post di Nicola here) O, se non si ha paura di riflessione, può essere fatto facilmente in questo modo:..
try {
Field declaredField = toolbar.getClass().getDeclaredField("mLogoView");
declaredField.setAccessible(true);
View logoView = (View) declaredField.get(toolbar);
logoView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
} catch (Exception ex) {
//error
}
Un'altra possibile soluzione sarebbe quella di impostare il layout personalizzato su ActionBar. Tuttavia, sto sostenendo di seguire le linee guida UI/UX e di ricontrollare, se il cassetto di navigazione è essenziale nell'attività secondaria.
fonte
2015-12-10 20:18:27
Grazie !! Ha funzionato! – raymondis