【发布时间】:2016-10-09 08:45:59
【问题描述】:
背景
我想在活动标题的左侧显示一个位图,在操作栏(确切地说是工具栏)中,所以我使用了这个:
@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);
...
问题
问题是,标志的左边似乎有太多的边距,而标题文本非常靠近标志本身,所以它看起来像这样:
这根本不是对称的……
如果我有导航抽屉,情况会更糟:
我尝试过的
-
我尝试了其他尺寸的图标,另外我尝试使用位图而不是可绘制/mipmap 资源(而且我实际上需要使用位图),例如:
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)); }
但我仍然得到相同的结果:
-
我试过用这个:
toolbar.setContentInsetsAbsolute(0,0); -
我尝试在工具栏的xml标签中使用这个:
android:contentInsetLeft="0px" android:contentInsetStart="0px"
我还尝试使用其右侧和末尾的其他值(至少使空间大小相等),但它们似乎根本不影响徽标边距。
-
似乎唯一有用的是:
app:contentInsetStartWithNavigation="0px"
但只有在有导航抽屉时才有用:
在没有导航抽屉的情况下,我仍然看到额外的空间,这使得徽标左侧与右侧相比看起来像是不均匀的空间。我尝试将此值设置为负数,但在没有导航抽屉的情况下它不会做任何事情。
- 我还尝试使用“布局检查器”工具调查为什么它有额外的空间,以便我可以强制它有更少的空间,但我找不到任何填充/边距导致这个:
问题
如何避免这种行为?如何最小化/设置徽标左右两侧的空间?
为什么会发生?
我应该改用自定义视图吗?
【问题讨论】:
-
您对自定义视图有很大的控制权。
-
能否请您展示如何模仿正常人的风格,以便用户不会注意到任何不同之处?真的没有其他官方方法可以克服这种行为吗?文字离标志很近,但标志离左边很远......
-
这个project利用其自定义视图和自定义编排利用协调器布局的真正功能。
-
@Enzokie 你能用最少的代码演示一下吗?
标签: android android-actionbar android-toolbar graphical-logo