我想在活动标题的左侧显示一个位图,在操作栏(确切地说是工具栏)中,所以我使用了这个:
@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);
...
事实上,徽标左侧边缘似乎太多,而标题文字非常靠近徽标本身,所以它看起来像这样:
这根本不对称......
如果我有导航抽屉,情况会更糟:
我尝试了其他尺寸的图标,而且我尝试使用位图而不是drawable / 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"
但只有有导航抽屉时才有用:
在没有导航抽屉的情况下,我仍然看到额外的空间,这使得它在徽标左侧看起来与其右侧相比看起来不均匀。我试图将此值设置为负数,但在没有导航抽屉的情况下它没有做任何事情。
我还尝试使用"布局检查器"来调查为什么它有额外的空间。工具,以便我可以强制它占用更少的空间,但我找不到任何会导致这种情况的填充/边距:
如何避免这种行为?如何最小化/设置徽标左侧和右侧的空间?
为什么会发生?
我应该只使用自定义视图吗?
答案 0 :(得分:3)
如何最小化/设置徽标左侧和右侧的空间?
在工具栏中使用这些属性来处理工具栏视图的边距。
android:layout_marginLeft="-16dp"
app:titleMarginStart="@dimen/your_required_space"
-16dp
留下大约4dp的空间。
使用layout_marginLeft
的缺点是,当徽标或自定义位图之前有另一个视图时,它无法正常工作。例如,导航抽屉时的汉堡包图标,启动子活动或打开导航抽屉时的向上插入图标(后箭头)。发生这种情况是因为徽标被这些视图取代。
在这种情况下,您可以使用:
app:contentInsetStartWithNavigation="0dp"
为什么会发生?
也许,工具栏类使用已设置的维度,开发人员认为这些维度是标准维度,并且没有明确的方法来改变它们。
我应该只使用自定义视图吗?
您可以在完全控制时使用自定义视图,但使用自定义视图时,您会遇到自定义问题。