Eric Cochran
Eric Cochran

Reputation: 8574

Android Toolbar "Up" Arrow in custom implementation

I am making a very custom Toolbar (don't freak, it's for good, not evil, I promise), and I want to put the "Up" arrow (the arrow that appears when there is a parent Activity set or for other reasons and has the nice ripple touch effect on Lollipop) in a custom location.

Is there a way to get this arrow as a View or asset to use somewhere else in the Toolbar?

I could not even find the image asset for the arrow. Any ideas?

For an example, I want top be able to do something like:

mToolbar.addView(arrowView, 0);
mToolbar.addView(titleView, 1);

Upvotes: 1

Views: 1090

Answers (3)

Nikola Despotoski
Nikola Despotoski

Reputation: 50578

If you don't want to place arrow icon as custom view in Toolbar, alternatively you can set content description to the navigation button and find view reference later. Every View or ViewGroup supports finding views with content description.

public static View getNavigationIcon(Toolbar toolbar){
    //check if contentDescription previously was set
    boolean hadContentDescription = TextUtils.isEmpty(toolbar.getNavigationContentDescription());
    String contentDescription = !hadContentDescription ? toolbar.getNavigationContentDescription() : "navigationIcon";
    toolbar.setNavigationContentDescription(contentDescription);
    ArrayList<View> potentialViews = new ArrayList<View>();
    //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 setNavigationContentDescription ensures its existence 
    View navIcon = null;
    if(potentialViews.size() > 0){
        navIcon = potentialViews.get(0); //navigation icon is ImageButton
    }
     //Clear content description if not previously present
    if(hadContentDescription)
        toolbar.setNavigationContentDescription(null);
    return navIcon;
 }

Upvotes: 1

kunal.c
kunal.c

Reputation: 2837

Toolbar is itself a ViewGroup were you can add different views for eg.

<android.support.v7.widget.Toolbar
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:minHeight="?attr/actionBarSize"
    app:theme="@style/ThemeOverlay.AppCompat.ActionBar" >

     <TextView ..../>
     <ImageView ...../>
</android.support.v7.widget.Toolbar>

Refer your toolbar and its elements from your java code to have control over it as:

Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
ImageView img = (ImageView) toolbar.findViewById(R.id.imgv);

Upvotes: 0

StupidFox
StupidFox

Reputation: 376

Maybe this will help, looks like something that you want, or you want completely custom up button with different position and view?

Upvotes: 1

Related Questions