Answers:
我修改了Cliffus的答案,并在我的动作栏样式定义中分配了徽标可绘制,例如在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中设置其他应用程序图标(“桌面”上的启动器图标。此处的任何其他徽标定义在没有操作栏的活动中都是可见的。
编辑:确保将此drawable设置为LOGO,而不是像某些注释程序那样将其设置为您的应用程序图标。
只需使XML可绘制,然后将其放在资源文件夹“可绘制”中即可(无需任何密度或其他配置)。
<?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对象上)将此新的可绘制对象设置为徽标
祝好运!
我还面临类似的问题,就我而言,我必须根据内容在每个活动中动态设置标题。
所以这对我有用。
actionBar.setTitle(" " + yourActivityTitle);
如果您只需要间距,这是我能想到的最简单的解决方案。
app:titleMarginStart
在布局XML中使用属性。
这就是我能够在主页图标和标题之间设置填充的方式。
ImageView 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/resout/layout/action_bar_home.xml
padding
,它似乎marginEnd
从api 17 开始使用-可能会破坏此解决方案。见下面的我
这是材料设计中的一个常见问题,因为您可能希望将工具栏标题与下面片段中的内容对齐。为此,您可以通过在toolbar.xml布局中使用属性contentInsetStart =“ 72dp”覆盖默认填充“ 12dp”,如下所示
工具栏
<?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"
可以直接定位标题。
contentInsetStart
在主页图标和标题之间放置空格,答案至少可以这样说。我刚才的测试contentInsetStart
似乎在徽标之前放置了空格(该徽标与主图标并不相同)。
对我来说,以下组合才有效,并经过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>
如果您使用的是AppCompat中的工具栏(android.support.v7.widget.Toolbar,> =修订版24,2016年6月),则可以使用以下值更改图标和标题之间的填充:
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"/>
使用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"/>
像这样设置徽标:
mToolbar = FindViewById<SupportToolbar>(Resource.Id.toolbar);
SetSupportActionBar(mToolbar);
SupportActionBar.SetLogo(Resource.Drawable.titleicon32x32);
SupportActionBar.SetDisplayShowHomeEnabled(true);
SupportActionBar.SetDisplayUseLogoEnabled(true);
SupportActionBar.Title = "App title";
我使用的是自定义图片,而不是我的应用徽标右侧的默认标题文本。这是通过编程方式设置的
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayUseLogoEnabled(true);
actionBar.setCustomView(R.layout.include_ab_txt_logo);
actionBar.setDisplayShowCustomEnabled(true);
上述答案对我来说是@Cliffus的建议对我不起作用,原因是其他人在评论中概述了这些问题,而@dushyanth程序化填充设置可能在过去起作用了,我认为间距是现在使用 android:layout_marginEnd="8dip"
API 17进行设置,因为手动设置填充应该无效。查看他发布到git的链接以验证其当前状态。
对我来说,一个简单的解决方案是在actionBar的自定义视图中设置一个负边距,就像android:layout_marginLeft="-14dp"
。快速测试显示它适用于2.3.3和4.3,适用于ActionBarCompat
希望这对某人有帮助!
我通过使用自定义导航布局解决了此问题
使用它,您可以自定义操作栏标题中的任何内容:
build.gradle
dependencies {
compile 'com.android.support:appcompat-v7:21.0.+'
...
}
AndroidManifest.xml
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name">
<activity
android:name=".MainActivity"
android:theme="@style/ThemeName">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
styles.xml
<style name="ThemeName" parent="Theme.AppCompat.Light">
<item name="actionBarStyle">@style/ActionBar</item>
<item name="android:actionBarStyle" tools:ignore="NewApi">@style/ActionBar</item>
<style name="ActionBar" parent="Widget.AppCompat.ActionBar">
<item name="displayOptions">showCustom</item>
<item name="android:displayOptions" tools:ignore="NewApi">showCustom</item>
<item name="customNavigationLayout">@layout/action_bar</item>
<item name="android:customNavigationLayout" tools:ignore="NewApi">@layout/action_bar</item>
<item name="background">@color/android:white</item>
<item name="android:background">@color/android:white</item>
action_bar.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/action_bar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:drawableLeft="@drawable/ic_launcher"
android:drawablePadding="10dp"
android:textSize="20sp"
android:textColor="@android:color/black"
android:text="@string/app_name"/>
就我而言,是通过工具栏我像这样解决它:
ic_toolbar_drawble.xml
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/ic_toolbar"
android:right="-16dp"
android:left="-16dp"/>
</layer-list>
在我的片段中,我检查api:
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
toolbar.setLogo(R.drawable.ic_toolbar);
else
toolbar.setLogo(R.drawable.ic_toolbar_draweble);
祝好运!
您可以这样更改DrawerArrow的drawableSize:
<style name="MyTheme" parent="android:Theme.WithActionBar">
<item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
</style>
<style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
<item name="barLength">24dp</item>
<item name="arrowShaftLength">24dp</item>
<item name="arrowHeadLength">10dp</item>
<item name="drawableSize">42dp</item> //this is your answer
</style>
这不是正确的答案,因为在更改drawableSize(drawableSize = width = height)时,您无法选择填充边和DrawerArrow图标缩放。但是您可以从左边开始。从正确的边缘做
findViewById(android.R.id.home).setPadding(10, 0, 5, 0);
我使用了这种方法setContentInsetsAbsolute(int contentInsetLeft, int contentInsetRight)
,并且有效!
int padding = getResources().getDimensionPixelSize(R.dimen.toolbar_content_insets);
mToolbar.setContentInsetsAbsolute(padding, 0);
使用自定义工具栏时,可以使用
toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle(R.string.activity_title);
setSupportActionBar(toolbar);
getSupportActionBar().setLogo(R.drawable.logo);
并在您的工具栏布局中进行简单设置 app:titleMarginStart="16dp"
请注意,您必须将图标设置为徽标,请不要使用,getSupportActionBar().setIcon(R.drawable.logo)
而是使用:
getSupportActionBar().setLogo(R.drawable.logo)
我曾经AppBarLayout
和定制ImageButton
做如此。
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:elevation="0dp"
android:background="@android:color/transparent"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="32dp"
android:layout_height="32dp"
android:src="@drawable/selector_back_button"
android:layout_centerVertical="true"
android:layout_marginLeft="8dp"
android:id="@+id/back_button"/>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
</RelativeLayout>
</android.support.design.widget.AppBarLayout>
我的Java代码:
findViewById(R.id.appbar).bringToFront();
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
final ActionBar ab = getSupportActionBar();
getSupportActionBar().setDisplayShowTitleEnabled(false);
您也可以通过方法实现相同的目的:
Drawable d = new InsetDrawable(getDrawable(R.drawable.nav_icon),0,0,10,0);
mToolbar.setLogo(d);
在您的XML中,app:titleMargin
在“工具栏”视图中设置,如下所示:
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:titleMarginStart="16dp"/>
或在您的代码中:
toolbar.setTitleMargin(16,16,16,16); // start, top, end, bottom
<string name="app_name">" "Brick Industry</string>
只需添加" "
您的应用名称即可在图标和标题之间添加空格