有人知道如何在ActionBar的主页图标和标题之间设置填充吗?
有人知道如何在ActionBar的主页图标和标题之间设置填充吗?
编辑:确保将此可绘制对象设置为LOGO,而不是像一些评论者那样设置为应用程序图标。
只需创建一个XML可绘制对象并将其放入资源文件夹“drawable”中(不带任何密度或其他配置)。
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@drawable/my_logo"
android:right="10dp"/>
</layer-list>
最后一步是将此新的可绘制对象设置为清单中的标志(或在您的活动中的 Actionbar 对象上设置)
祝你好运!
我采用了Cliffus的答案,并在我的ActionBar样式定义中指定了logo-drawable,例如在res/style.xml中像这样:
<item name="android:actionBarStyle">@style/MyActionBar</item>
<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:background">#3f51b5</item>
<item name="android:titleTextStyle">@style/ActionBar.TitleText</item>
<item name="android:textColor">#fff</item>
<item name="android:textSize">18sp</item>
<item name="android:logo">@drawable/actionbar_space_between_icon_and_title</item>
</style>
在res/drawable/actionbar_space_between_icon_and_title.xml中,可绘制对象看起来像Cliffus的一个(这里是使用默认应用启动器图标):
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/ic_launcher"
android:right="20dp"/>
</layer-list>
在android_manifest.xml中,你仍然可以设置不同的应用图标(‘桌面’上的启动器图标)。这里定义的任何不同的logo都会在没有操作栏的活动中可见。我也遇到了类似的问题,在我的情况下,我必须根据内容在每个活动中动态设置标题。
所以这对我有用。
actionBar.setTitle(" " + yourActivityTitle);
如果你只需要调整间距,这是我能想到的最简单的解决方案。
app:titleMarginStart
属性。 - LarsHImageView view = (ImageView)findViewById(android.R.id.home);
view.setPadding(left, top, right, bottom);
我找不到一种通过ActionBar xml样式自定义的方法。也就是说,以下XML代码无法生效:
<style name="ActionBar" parent="android:style/Widget.Holo.Light.ActionBar">
<item name="android:titleTextStyle">@style/ActionBarTitle</item>
<item name="android:icon">@drawable/ic_action_home</item>
</style>
<style name="ActionBarTitle" parent="android:style/TextAppearance.Holo.Widget.ActionBar.Title">
<item name="android:textSize">18sp</item>
<item name="android:paddingLeft">12dp</item> <!-- Can't get this padding to work :( -->
</style>
然而,如果您想通过xml实现这一点,这两个链接可能会帮助您找到解决方案:
https://github.com/android/platform_frameworks_base/blob/master/core/res/res/values/styles.xml
这是在操作栏中显示主页图标所使用的实际布局。 https://github.com/android/platform_frameworks_base/blob/master/core/res/res/layout/action_bar_home.xml
padding
设置,似乎从api 17开始使用marginEnd
- 这可能会破坏此解决方案。请参见下面的代码: - Dori在Material Design中,这是一个常见的问题,因为您可能希望将工具栏标题与下面片段中的内容对齐。为了做到这一点,您可以通过在toolbar.xml布局中使用属性contentInsetStart="72dp"来覆盖默认填充"12dp"。
toolbar.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/app_theme_color"
app:contentInsetStart="72dp"/>
然后在你的活动中调用
Toolbar toolbar = (Toolbar) activity.findViewById(R.id.toolbar);
toolbar.setTitle("Title Goes Here");
然后你最终得到了这个:
app:titleMarginStart="dimension"
来直接调整标题的位置。 - Markus RubeycontentInsetStart
在主页图标和标题之间放置空间,答案至少可以这样说。我刚才用contentInsetStart
进行的测试似乎将空格放在了徽标之前(尽管这与主页图标不同)。 - LarsH app:contentInsetStartWithNavigation="0dp"
为了改善我的答案,您可以直接在活动中使用工具栏,也可以为您的工具栏创建一个新的布局文件。在这种情况下,您只需要使用include属性导入工具栏的@id,在每个需要的视图上使用它即可。
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:elevation="4dp"
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
app:contentInsetStartWithNavigation="0dp">
</android.support.v7.widget.Toolbar>
您可以在activity.xml上导入您的布局。<include
layout="@layout/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
对我而言,只有以下组合适用,已在API 18到24进行过测试
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
app:contentInsetStartWithNavigation="0dp"
在 "app" 中的位置是:xmlns:app="http://schemas.android.com/apk/res-auto"
例如。
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/SE_Life_Green"
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
app:contentInsetStartWithNavigation="0dp"
>
.......
.......
.......
</android.support.v7.widget.Toolbar>
使用titleMarginStart
对我而言是可行的。Xamarin示例:
<android.support.v7.widget.Toolbar
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:titleMarginStart="24dp"/>
设置logo的方法如下:
mToolbar = FindViewById<SupportToolbar>(Resource.Id.toolbar);
SetSupportActionBar(mToolbar);
SupportActionBar.SetLogo(Resource.Drawable.titleicon32x32);
SupportActionBar.SetDisplayShowHomeEnabled(true);
SupportActionBar.SetDisplayUseLogoEnabled(true);
SupportActionBar.Title = "App title";
我之前在标题前使用了 \t,它对我有用。
我正在使用自定义图像来代替我的应用程序标志右侧的默认标题文本。这是通过编程设置的,如下所示:
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayUseLogoEnabled(true);
actionBar.setCustomView(R.layout.include_ab_txt_logo);
actionBar.setDisplayShowCustomEnabled(true);
android:layout_marginEnd="8dip"
设置间距后,手动设置填充应该没有效果。请查看他发布到git的链接以验证其当前状态。android:layout_marginLeft="-14dp"
。快速测试表明它适用于我在2.3.3和4.3上使用ActionBarCompat
希望这能帮助某人!