Alguém sabe como definir o preenchimento entre o ícone inicial da ActionBar e o título?
Alguém sabe como definir o preenchimento entre o ícone inicial da ActionBar e o título?
Respostas:
Eu adaptei a resposta de Cliffus e atribuí o desenho do logotipo em minha definição de estilo da barra de ações, por exemplo, em 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>
O drawable se parece com o de Cliffus (aqui com o ícone do inicializador de aplicativos padrão) em res / drawable / actionbar_space_between_icon_and_title.xml:
<?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>
No android_manifest.xml, você ainda pode definir um ícone de aplicativo diferente (ícone do iniciador na 'área de trabalho'. Qualquer definição de logotipo diferente aqui é visível nas atividades sem uma barra de ação.
EDITAR : certifique-se de definir este drawable como LOGO , não como o ícone do aplicativo como alguns dos comentadores fizeram.
Basta fazer um drawable XML e colocá-lo na pasta de recursos "drawable" (sem nenhuma densidade ou outra configuração).
<?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>
A última etapa é definir este novo drawable como logotipo em seu manifesto (ou no objeto Actionbar em sua atividade)
Boa sorte!
Eu também enfrentei um problema semelhante, no meu caso eu tive que definir títulos dinamicamente em cada atividade dependendo do conteúdo.
Então isso funcionou para mim.
actionBar.setTitle(" " + yourActivityTitle);
Se tudo o que você quer é o espaçamento, esta é a solução mais fácil que eu poderia pensar.
app:titleMarginStart
atributo no XML do layout.
Foi assim que consegui definir o espaçamento entre o ícone inicial e o título.
ImageView view = (ImageView)findViewById(android.R.id.home);
view.setPadding(left, top, right, bottom);
Não consegui encontrar uma maneira de personalizar isso por meio dos estilos XML da ActionBar. Ou seja, o seguinte XML não funciona:
<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>
No entanto, se você deseja fazer isso por meio de xml, esses dois links podem ajudá-lo a encontrar uma solução:
https://github.com/android/platform_frameworks_base/blob/master/core/res/res/values/styles.xml
(Este é o layout real usado para exibir o ícone da página inicial em uma barra de ação) https://github.com/android/platform_frameworks_base/blob/master/core/res/res/layout/action_bar_home.xml
padding
, parece usar marginEnd
desde api 17 - o que provavelmente quebrará essa solução. Veja o meu abaixo
Esta é uma pergunta comum no Material Design, pois você pode querer alinhar o título da barra de ferramentas com o conteúdo do fragmento abaixo. Para fazer isso, você pode substituir o preenchimento padrão de "12dp" usando o atributo contentInsetStart = "72dp" em seu layout toolbar.xml conforme mostrado abaixo
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"/>
Então, em sua atividade, ligue
Toolbar toolbar = (Toolbar) activity.findViewById(R.id.toolbar);
toolbar.setTitle("Title Goes Here");
E você acaba com isso:
app:titleMarginStart="dimension"
necessário direcionar o título diretamente.
contentInsetStart
colocar um espaço entre o ícone da página inicial e o título, a resposta poderia pelo menos dizer isso. Meu teste agora com contentInsetStart
parecia colocar o espaço antes do logotipo (que reconhecidamente não é o mesmo que o ícone de casa).
Para mim, apenas a seguinte combinação funcionou, testada de API 18 a 24
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
app:contentInsetStartWithNavigation="0dp"
onde em "app" está: xmlns:app="http://schemas.android.com/apk/res-auto"
por exemplo.
<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>
Se você estiver usando a barra de ferramentas do AppCompat (android.support.v7.widget.Toolbar,> = revisão 24, junho de 2016), o preenchimento entre o ícone e o título pode ser alterado com o seguinte valor:
app:contentInsetStartWithNavigation="0dp"
Para melhorar minha resposta, você pode usá-lo em sua barra de ferramentas diretamente dentro de sua atividade ou pode criar um novo arquivo de layout para sua barra de ferramentas. Nesse caso, você só precisa importar o @id de sua barra de ferramentas usando a propriedade include em cada visualização necessária.
<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>
Você pode então importar seu layout em seu activity.xml
<include
layout="@layout/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
Usar titleMarginStart
funciona para mim. Exemplo de 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"/>
Defina o logotipo assim:
mToolbar = FindViewById<SupportToolbar>(Resource.Id.toolbar);
SetSupportActionBar(mToolbar);
SupportActionBar.SetLogo(Resource.Drawable.titleicon32x32);
SupportActionBar.SetDisplayShowHomeEnabled(true);
SupportActionBar.SetDisplayUseLogoEnabled(true);
SupportActionBar.Title = "App title";
Estou usando uma imagem personalizada em vez do texto do título padrão à direita do logotipo do meu aplicativo. Isso é configurado programaticamente como
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayUseLogoEnabled(true);
actionBar.setCustomView(R.layout.include_ab_txt_logo);
actionBar.setDisplayShowCustomEnabled(true);
Os problemas com as respostas acima para mim são: a sugestão de @ Cliffus não funciona para mim devido aos problemas que outros descreveram nos comentários e, embora a configuração de preenchimento programático @dushyanth possa ter funcionado no passado, acho que o fato de o espaçamento ser agora definido usando android:layout_marginEnd="8dip"
desde a API 17, definir manualmente o preenchimento não deve ter efeito. Veja o link que ele postou no git para verificar seu estado atual.
Uma solução simples para mim é definir uma margem negativa em minha visualização personalizada na actionBar, assim android:layout_marginLeft="-14dp"
. Um teste rápido mostra que funciona para mim em 2.3.3 e 4.3 usandoActionBarCompat
Espero que isso ajude alguém!
Resolvi esse problema usando o layout de navegação personalizado
Usando-o, você pode personalizar qualquer coisa no título da barra de ação:
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"/>
Tive um problema semelhante, mas com espaçamento entre o ícone / logotipo do aplicativo personalizado e na barra de ação. A solução de Dushyanth de definir o preenchimento programaticamente funcionou para mim (configuração do preenchimento no ícone do aplicativo / logotipo). Tentei encontrar android.R.id.home ou R.id.abs__home ( apenas ActionBarSherlock , pois isso garante compatibilidade com versões anteriores) e parece funcionar em dispositivos 2.3-4.3 em que testei.
No meu caso, foi com a Barra de Ferramentas que resolvi assim:
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>
No meu Fragment, eu verifico a 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);
Boa sorte!
Você pode alterar drawableSize de seu DrawerArrow assim:
<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>
Não é a resposta correta, porque você não pode escolher o lado do preenchimento e a escala do ícone DrawerArrow ao alterar drawableSize (drawableSize = largura = altura). Mas você pode fazer a margem da esquerda. Para a margem da direita faça
findViewById(android.R.id.home).setPadding(10, 0, 5, 0);
Usei esse método setContentInsetsAbsolute(int contentInsetLeft, int contentInsetRight)
e funciona!
int padding = getResources().getDimensionPixelSize(R.dimen.toolbar_content_insets);
mToolbar.setContentInsetsAbsolute(padding, 0);
Quando estiver usando uma barra de ferramentas personalizada, você pode usar
toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle(R.string.activity_title);
setSupportActionBar(toolbar);
getSupportActionBar().setLogo(R.drawable.logo);
e no layout da barra de ferramentas basta definir app:titleMarginStart="16dp"
Observe que você deve definir o ícone como um logotipo, não use em getSupportActionBar().setIcon(R.drawable.logo)
vez disso:
getSupportActionBar().setLogo(R.drawable.logo)
Eu usei AppBarLayout
e costumo ImageButton
fazer isso.
<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>
Meu código Java:
findViewById(R.id.appbar).bringToFront();
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
final ActionBar ab = getSupportActionBar();
getSupportActionBar().setDisplayShowTitleEnabled(false);
Você também pode conseguir o mesmo pelo método:
Drawable d = new InsetDrawable(getDrawable(R.drawable.nav_icon),0,0,10,0);
mToolbar.setLogo(d);
Em seu XML, defina o app:titleMargin
em sua visualização da Barra de Ferramentas da seguinte forma:
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:titleMarginStart="16dp"/>
Ou em seu código:
toolbar.setTitleMargin(16,16,16,16); // start, top, end, bottom
isso funciona para mim adicionar preenchimento ao título e para o ActionBar
ícone eu configurei isso programaticamente.
getActionBar().setTitle(Html.fromHtml("<font color='#fffff'> Boat App </font>"));
<string name="app_name">" "Brick Industry</string>
Basta adicionar " "
o nome do aplicativo. Isso adicionará um espaço entre o ícone e o título