在ActionBar的主页图标和标题之间填充
有谁知道如何在ActionBar的主页图标和标题之间设置填充?
我调整了Cliffus的答案,并在我的actionbar样式定义中分配了可绘制的标识,例如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中,drawable看起来像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 ,而不是像一些评论者那样做你的app图标。
只要制作一个可绘制的XML文件,并把它放在资源文件夹“drawable”(没有任何密度或其他configuration)。
<?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>
最后一步是将这个新的drawable设置为清单中的徽标(或者在您的活动中的Actionbar对象上)
祝你好运!
我也面临类似的问题,在我的情况下,我必须根据内容dynamic地在每个活动上设置标题。
所以这为我工作。
actionBar.setTitle(" " + yourActivityTitle);
如果所有你想要的是间距,这是我能想到的最简单的解决scheme。
这是我能够设置主页图标和标题之间的填充。
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实现这一点,这两个链接可能会帮助您find一个解决scheme:
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
这是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");
你最终得到这个:
对于我来说,只有以下组合工作,从API 18至24testing
app:contentInsetLeft="0dp" app:contentInsetStart="0dp" app:contentInsetStartWithNavigation="0dp"
在“应用程序”中的位置是: 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,> = revision 24,2016年6月)使用工具栏,则图标和标题之间的填充可以使用以下值更改:
app:contentInsetStartWithNavigation="0dp"
为了改进我的答案,您可以直接在您的活动中使用它,或者您可以为您的工具栏创build一个新的布局文件。 在这种情况下,您只需在每个需要的视图上使用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的build议不起作用,因为其他人在评论中概述的问题,而@dushyanth programatic填充设置可能在过去工作,我会认为间距现在使用android:layout_marginEnd="8dip"
设置,因为API 17手动设置填充应该没有效果。 查看他发布到git的链接以validation其当前状态。
对我来说一个简单的解决scheme是在android:layout_marginLeft="-14dp"
自定义视图中设置一个负边距,就像android:layout_marginLeft="-14dp"
。 一个快速testing显示,它使用ActionBarCompat
在2.3.3和4.3上适用于我
希望这可以帮助别人!
我通过使用自定义导航布局解决了这个问题
使用它你可以在操作栏的标题中自定义任何东西:
的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"/>
我有一个类似的问题,但行动栏中的上升和自定义应用程序图标/徽标之间的间距。 Dushyanth的设置填充的解决scheme编程方式为我工作(设置填充应用程序/标志图标)。 我试图findandroid.R.id.home或R.id.abs__home ( ActionBarSherlock只 ,因为这确保了向后兼容性),它似乎在我testing过的2.3-4.3设备上工作。
对于我的情况,这是与工具栏我解决它是这样的:
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)时,您不能select填充边和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);
这个工作为我添加填充的标题和ActionBar
图标我已经设置编程。
getActionBar().setTitle(Html.fromHtml("<font color='#fffff'> Boat App </font>"));
<string name="app_name">" "Brick Industry</string>
只需为您的应用程序名称添加" "
在图标和标题之间添加空格