4

Je travaille sur une application qui utilise un tiroir de navigation (que j'ai généré à partir du modèle d'activité d'Android Studio), qui utilise fragments en interne. Le tiroir de navigation est imbriqué dans mon MainActivity. J'ai également inclus un menu dans la barre d'outils qui a deux options supplémentaires; Filtre & Paramètres (Paramètres générés à partir du modèle AS aussi). My LoginActivity utilise l'attribut drawableLeft ainsi qu'un drawableTint (qui, je le sais, ne fonctionne que pour API23 et versions ultérieures). Comment puis-je obtenir l'icône drawableLeft en blanc sur les anciennes versions? LoginActivityProblèmes de compatibilité d'interface utilisateur entre différentes versions d'API

Mon deuxième problème, plus important, concerne le Toolbar et sa compatibilité. Dans l'API 24 (simulée à l'aide du Nexus 5X), le Toolbar est bien aligné sous la barre d'état, alors que dans l'API 19, le Toolbar passe sous la barre d'état qui a également une couleur non concordante. Maintenant, je suis conscient que la barre d'outils est un nouvel ajout à la conception matérielle et donc supporté par API 23+ (je pense), mais quelle serait la bonne approche pour résoudre ce problème?

MainActivity

app_bar_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.michael.whatsupldn.MainActivity"> 

    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:scaleType="centerCrop" 
     android:src="@drawable/london_skyline_dark" 
     android:layout_alignParentTop="true" 
     android:id="@+id/imageView" 
     android:contentDescription="@string/london_skyline"/> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      android:elevation="4dp" 
      android:fitsSystemWindows="true" 
      app:popupTheme="@style/AppTheme.PopupOverlay"/> 

    </android.support.design.widget.AppBarLayout> 

    <include layout="@layout/content_main" /> 

</android.support.design.widget.CoordinatorLayout> 

Toute aide sera très appréciée!

P.S. Si un code est nécessaire pour faciliter l'analyse, il suffit de demander.

EDIT

J'ai aussi rencontré le même problème Toolbar dans mon FilterActivity ... FiltersActivity

MISE À JOUR

Après avoir appliqué fitsSystemWindows-AppBarLayout et CoordinatorLayout, voici le résultat suivant, qui n'a pas résolu mon problème. Il a effectivement fait le cas pire comme déstabilisé la sortie dans l'API 24.

MainActivity after EDIT

+0

Pour le 1er numéro: définissez-vous la couleur de drawable comme @ color/white ou #ffffff? –

+0

@UsmanRana Je le configure de la façon suivante: android: drawableTint = "# FAFAFA" – AndroidDevBro

+0

Utilisez-vous les ressources vectorielles pour ce dessin? –

Répondre

0

numéro 1 a été fixé grâce à Arnab Kuntu.

Édition 2 J'ai réussi à trouver une solution pour moi-même lorsque j'ai joué avec les thèmes au styles. Mon AppTheme avait la déclaration suivante imbriquée dans <item name="android:windowTranslucentStatus">true</item>, ce qui rend le Status bar transparent, ce qui fait penser au simulateur qu'il n'y a aucune base pour supporter le Action Bar/Toolbar qui se repose en dessous.

1

Comment puis-je obtenir l'icône drawableLeft pour afficher en blanc sur les anciennes versions?

Vous pouvez utiliser DrawableCompat:

Drawable drawable = getResources().getDrawable(R.drawable.some_drawable); 
drawable = DrawableCompat.wrap(drawable); 
DrawableCompat.setTint(drawable.mutate(), getResources().getColor(android.R.color.white)); 

Source

Quelle serait la bonne approche dans la fixation de cette (barre d'outils allignment)?

Appliquer android:fitsSystemWindows="true" à la fois Toolbar et ses parents.

+0

Ok, j'ai inclus dans la barre d'outils maintenant, mais quel serait son parent? J'ai inclus mon code XML pour l'app_bar ... – AndroidDevBro

+0

Appliquez 'fitsSystemWindows' à' AppBarLayout' et 'CoordinatorLayout'. – azizbekian

+0

S'il vous plaît jeter un oeil à mon poste, je l'ai mis à jour avec la sortie. Cela n'a pas fonctionné pour moi. – AndroidDevBro

2

Je pense que votre code vectoriel est comme ça .....

<vector xmlns:android="http://schemas.android.com/apk/res/android" 
    android:width="24dp" 
    android:height="24dp" 
    android:viewportWidth="24.0" 
    android:viewportHeight="24.0"> 
<path 
    android:fillColor="@color/colorWhite" 
    android:pathData="M12,17c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 
    0.9,2 2,2zM18,8h-1L17,6c0,-2.76 -2.24,-5 -5,-5S7,3.24 7,6v2L6,8c-1.1,0 
    -2,0.9 -2,2v10c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2L20,10c0,-1.1 -0.9,-2 
    -2,-2zM8.9,6c0,-1.71 1.39,-3.1 3.1,-3.1s3.1,1.39 
    3.1,3.1v2L8.9,8L8.9,6zM18,20L6,20L6,10h12v10z"/> 
</vector> 

changer cette ligne de code

 android:fillColor="@color/colorWhite" 

à .....

 android:fillColor="#FFFFFF" 

Si Je ne me trompe pas, c'est la solution pour vous. enter image description here

+0

Oui, cela a fonctionné - merci beaucoup, bonne réponse! Avez-vous, par un changement, regardé la deuxième question que j'ai mentionnée? – AndroidDevBro

+0

https://stackoverflow.com/questions/26532045/tinting-checkbox-on-pre-v21 –

+0

Vous pouvez passer par ce lien c'est lié avec buttonTint.But pour la case à cocher que j'ai utilisé. Je ne suis pas sûr que cela fonctionnera pour vous ou pas. –

1

Vous pouvez définir la couleur par programmation et il travaillerait pour vous:

// 0=left, 1=top , 2=right , 3=bottom 
    editText.getCompoundDrawables[0].mutate().setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP);