Android Lollipop, exibição personalizada AppCompat ActionBar não ocupa largura de tela inteira

? steve_the_kid @ | Original: StackOverFlow
---

Então, eu só atualizei meu código base para pirulito, e eu estou tendo problemas com a barra de ação. Estou usando AppCompat e ActionBarActivity, e inflar uma exibição personalizada . Parece que a visão personalizada já não ocupa toda a largura do ecrã, deixando uma fina faixa da esquerda

Android Lollipop, exibição personalizada AppCompat ActionBar não ocupa largura de tela inteira Way se usou para olhar

Android Lollipop, exibição personalizada AppCompat ActionBar não ocupa largura de tela inteira Way parece agora

Este é o código que estou usando para configurar a barra de ação. Alguém tem alguma idéia ?

final ActionBar actionBar = getSupportActionBar();
if(actionBar != null) {
    actionBar.setDisplayHomeAsUpEnabled(false);
    actionBar.setDisplayShowHomeEnabled(false);
    actionBar.setDisplayShowTitleEnabled(false);
    actionBar.setDisplayShowCustomEnabled(true);
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
    actionBar.setCustomView(R.layout.action_bar_content_search_custom_view);
    actionBar.setBackgroundDrawable(null);
    // actionBar.setStackedBackgroundDrawable(null);
    TextView title = (TextView) actionBar.getCustomView().findViewById(R.id.action_bar_title);
    title.setText(R.string.youtube);
    ImageView back = (ImageView) actionBar.getCustomView().findViewById(R.id.action_bar_back);
    back.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            finish();
        }
    });
}

Edit

Tirando a exibição personalizada e mudar o fundo agora ocupa toda a largura . Assim, a questão é, como é que podemos fazer uma CustomView tomai toda a largura da ActionBar ?

---

Top 5 Responder

1Muzikant @

Parece que isso é causado pelas recentes modificações ao ActionBar no recente appcompat-v7 update . Parece que há mudanças significativas no modo como você deve lidar com barras de ação .

Eu enfrentei o mesmo problema e depois de ler o http://developer.android.com/reference/android/support/v7/app/ActionBar.html e, especialmente, a seguinte citação que encontrei uma solução .

Começando com Android L ( nível API 21), a barra de ação pode ser representado por qualquer widget Barra de Ferramentas do esquema de aplicação. O pedido pode sinalizar para a Actividade que Toolbar deve ser tratado como barra de ação da atividade. Atividades que usam esse recurso deve usar um dos temas .NoActionBar fornecidos, defina o atributo windowActionBar como falso ou de outra forma não solicitar o recurso janela.

A forma como eu vejo, os ActionBar temas foram alterados e, por um lado pareceu quebrar algumas coisas, mas oferecem muito mais flexibilidade, por outro . Eu recomendo seguindo estes passos:

Use AppCompat style in your activity as described in the above quote Add a .NoActionBar to your Activity layout Set the android.support.v7.widget.Toolbar attribute. This is the main issue with the margin that you describe in your question
app:contentInsetStart="0dp"

Geralmente é recomendável que você faça isso em um arquivo de layout separado e usar <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/actionBar" android:layout_width="match_parent" android:layout_height="wrap_content" app:contentInsetEnd="0dp" app:contentInsetStart="0dp" > </android.support.v7.widget.Toolbar> em seu layout atividade assim você só vai precisar de personalizar a barra de ferramentas em um só lugar, se usado em várias atividades

include
Use <include layout="@layout/view_action_bar" /> and findViewById in your Activity setSupportActionBar to onCreate
signal to the Activity which Toolbar should be treated as the Activity's action bar
Once you do that, all actions added in Toolbar actionBar = (Toolbar) findViewById(R.id.actionBar); setSupportActionBar(actionBar); will be added to the toolbar and it will be treated as the activity action bar. Further customize the Toolbar as desired (Add child views etc.) 2Gian Darren Azriel Aquino @

Eu acho que você também pode fazer isso em estilos . tente isso. testamos em kitkat

onCreateOptionsMenu
3LeoLink @

Eu só encontrei este problema hoje, bem, então eu descobri que eu estava tendo <style name="AppTheme" parent="Theme.AppCompat"> <item name="toolbarStyle">@style/AppThemeToolbar</item> </style> <style name="AppThemeToolbar" parent="Widget.AppCompat.Toolbar" > <item name="contentInsetStart">0dp</item> </style> dentro do meu projeto, que foi gerado automaticamente por Android Studio e que é a causa.

Why?

Como o conteúdo meu res/values-v21/styles.xml ' s foi:

res/values-v21/styles.xml

E a minha <?xml version="1.0" encoding="utf-8"?> <resources> <style name="BaseAppTheme" parent="android:Theme.Material.Light"> </style> </resources> contido algo como:

res/values/styles.xml

Então, quando eu corri minha app em Lollipop, o <style name="BaseAppTheme" parent="android:Theme.Holo.Light"> <!-- Customize your theme here. --> <item name="android:windowContentOverlay">@null</item> <item name="android:soundEffectsEnabled">false</item> </style> foi usado, e que causou o problema exato que tinha OP . Então eu vim para um reparo simples é apenas a exclusão :

res/values-v21/styles.xml

in <style name="BaseAppTheme" parent="android:Theme.Material.Light"> </style>