I want to show a bitmap on the left side of the title of the activity, in the actionbar (toolbar, to be exact), so I used this:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setLogo(R.mipmap.ic_launcher);
...
Thing is, the logo seems to have too much margin on its left, while the title text is very near the logo itself, so it looks like this:
This is not symmetrical at all...
This is even worse in case I have a nav drawer:
I tried other sizes of the icon, plus I tried to use a bitmap instead of a drawable/mipmap resource (and I actually need to use a bitmap anyway), as such:
TypedValue tv = new TypedValue();
if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) {
int actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics());
Bitmap bitmap = Bitmap.createBitmap(actionBarHeight, actionBarHeight, Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
final Paint paint = new Paint();
paint.setColor(0xffff0000);
canvas.drawPaint(paint);
getSupportActionBar().setLogo(new BitmapDrawable(getResources(),bitmap));
}
But I still got the same result:
I tried to use this:
toolbar.setContentInsetsAbsolute(0,0);
I tried to use this in the xml tag of the toolbar:
android:contentInsetLeft="0px"
android:contentInsetStart="0px"
I also tried to play with the other values to its right&end (at least to make the spaces equal in size), but they don't seem to affect the logo margins at all.
Only thing that seem to help is this:
app:contentInsetStartWithNavigation="0px"
But it helps only if there is a navigation-drawer:
In the case of no navigation drawer, I still see extra space, which makes it look like un-even spaces on the left of the logo compared to on its right. I tried to set this value to be negative, but it doesn't do anything in the case of no nav-drawer.
How do I avoid this behavior? How can I minimize/set the space on the left&right of the logo?
Why does it occur?
Should I just use a custom view instead?
How can I minimize/set the space on the left&right of the logo ?
Use these attributes in your toolbar to handle margins of the toolbar view.
android:layout_marginLeft="-16dp"
app:titleMarginStart="@dimen/your_required_space"
-16dp
leaves about 4dp space.
The disadvantage of using layout_marginLeft
is that it does not work well when there is another view before the logo or your custom bitmap. For example, hamburger icon in case of Navigation Drawer, up-caret icon (back-arrow) when child activity is launched or navigation drawer is opened. This happens because the logo gets replaced by such views.
In such case, you can use :
app:contentInsetStartWithNavigation="0dp"
Why does it occur?
Maybe, toolbar class uses already set dimensions which the developers think are the standard dimensions and there is no explicit way to alter them.
Should I just use a custom view instead?
You can use custom views as you've complete control but with custom views, you get custom headaches.
User contributions licensed under CC BY-SA 3.0