Android Lollipop, AppCompat ActionBar visualizzazione personalizzata non occupa tutto lo schermo di larghezza

? steve_the_kid @ | Original: StackOverFlow

Allora, ho appena aggiornato il mio codice di base di Lollipop, e sto avendo problemi con la barra delle azioni . Sto utilizzando AppCompat e ActionBarActivity, e gonfiare una visualizzazione personalizzata . Sembra che la visualizzazione personalizzata non occupa tutta la larghezza dello schermo, lasciando una sottile striscia sulla sinistra

Android Lollipop, AppCompat ActionBar visualizzazione personalizzata non occupa tutto lo schermo di larghezza Way ha usato per guardare

Android Lollipop, AppCompat ActionBar visualizzazione personalizzata non occupa tutto lo schermo di larghezza Way sembra ora

Questo è il codice che sto usando per impostare l' azione Bar. Qualcuno ha qualche idea ?

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 fuori la visualizzazione personalizzata e cambiare lo sfondo ora occupa l' intera larghezza . Quindi il problema è: come possiamo fare una CustomView occupano tutta la larghezza della ActionBar ?



Top 5 Respuesta

1Muzikant @

Sembra che questo è causato dalle ultime modifiche al ActionBar nel recente aggiornamento appcompat-v7 . Sembra che ci siano cambiamenti significativi come si dovrebbe gestire barre di azione .

Ho affrontato lo stesso problema e dopo aver letto la http://developer.android.com/reference/android/support/v7/app/ActionBar.html, e in particolare la seguente citazione ho trovato una soluzione .

Cominciando con Android L ( livello di API 21 ), la barra di azione può essere rappresentato da qualsiasi oggetto Toolbar all'interno del layout dell'applicazione . L' applicazione può segnalare l'attività che Toolbar deve essere trattato come bar azione del Activity . Le attività che utilizzano questa funzionalità dovrebbero utilizzare uno dei temi .NoActionBar dotazione, impostare l'attributo windowActionBar false o comunque non richiedere la funzione di finestra .

Il mio modo di vedere, i ActionBar temi sono stati modificati e da un lato sembrava rompere un paio di cose, ma di fornire una maggiore flessibilità, dall'altro . Raccomando la seguente procedura :

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"

Di solito è consigliabile farlo in un file di layout separato e utilizzare <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> nel layout attività, in modo si avrà solo bisogno di personalizzare la barra degli strumenti in un unico luogo, se utilizzato in molteplici attività

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 @

Penso che si può anche fare in stili . provare questo . testato su kitkat

onCreateOptionsMenu
3LeoLink @

Ho appena incontrato questo problema anche oggi, poi ho scoperto che ho avuto <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 il mio progetto che è stato generato automaticamente da Android Studio e che è la causa .

Why?

Poiché il contenuto mia s ' res/values-v21/styles.xml è stato :

res/values-v21/styles.xml

E il mio <?xml version="1.0" encoding="utf-8"?> <resources> <style name="BaseAppTheme" parent="android:Theme.Material.Light"> </style> </resources> contenuto qualcosa di simile :

res/values/styles.xml

Poi, quando mi sono imbattuto la mia app sul Lollipop, la <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> è stato utilizzato, e che ha causato problema esatto che aveva OP . Così sono arrivato a una semplice correzione è solo l'eliminazione :

res/values-v21/styles.xml

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