如何在actionBar中的徽标的左右设置空间? [英] How to set space on left&right of the logo in the actionBar?
问题描述
我想在操作标题(确切地说是工具栏)的活动标题的左侧显示位图,所以我使用了这个:
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);
...
问题
事实是,徽标的左侧似乎有太多的空白,而标题文本距离徽标本身很近,因此看起来像这样:
The problem
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:
-
我尝试了其他尺寸的图标,此外,我尝试使用位图而不是可绘制/mipmap资源(实际上我仍然需要使用位图),例如:
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);
我试图在工具栏的xml标记中使用它:
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.
- 我还尝试使用布局检查器"调查它为何具有额外的空间.工具,以便我可以强迫它具有更少的空间,但是我找不到会导致此问题的填充/边距:
- I've also tried to investigate why it has the extra space, using the "layout inspector" tool so that I might be able to force it to have less space, but I couldn't find any padding/margins that will cause this:
如何避免这种行为?如何最小化/设置徽标左侧和右侧的空间?
How do I avoid this behavior? How can I minimize/set the space on the left&right of the logo?
为什么会发生?
我应该改用自定义视图吗?
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
保留约4dp的空间.
-16dp
leaves about 4dp space.
使用 layout_marginLeft
的缺点是,当徽标或您的自定义位图之前有另一个视图时,它不能很好地工作.例如,对于导航抽屉,为汉堡图标,在启动儿童活动或打开导航抽屉时为向上箭头图标(后箭头).发生这种情况是因为徽标已被此类视图取代.
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"
为什么会发生?
也许,工具栏类使用已经设置的尺寸,开发人员认为这些尺寸是标准尺寸,并且没有明确的方法来更改它们.
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.
这篇关于如何在actionBar中的徽标的左右设置空间?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!