Je viens d'ajouter une barre d'outils Android à une application sur laquelle je travaille. L'emplacement de la barre d'outils fonctionne correctement avec la disposition de la barre d'outils qui apparaît en haut de l'écran. Cependant, la barre d'outils apparaît sous la forme d'une barre de couleur vierge ... le titre de l'application et l'icône de débordement n'apparaissent pas dans la barre d'outils. Des idées sur comment réparer?
ToolbarActivity.Java:
public abstract class ToolbarActivity extends ActionBarActivity {
private Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
toolbar = (Toolbar) findViewById(R.id.toolbar);
if (toolbar != null) {
setSupportActionBar(toolbar);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
toolbar.setTitle("app name");
}
}
toolbar.xml:
<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.Toolbar
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/toolbar"
Android:layout_height="wrap_content"
Android:layout_width="match_parent"
Android:minHeight="?attr/actionBarSize"
Android:theme="@style/ThemeOverlay.AppCompat.Dark"
Android:background="@color/ColorPrimary" >
</Android.support.v7.widget.Toolbar>
menu_main.xml:
<menu 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"
tools:context=".MainActivity">
<item Android:id="@+id/action_settings"
Android:title="@string/action_settings"
Android:orderInCategory="100"
app:showAsAction="always" />
</menu>
style.xml:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="windowActionBar">false</item>
<item name="Android:windowNoTitle">true</item>
<item name="colorPrimary">@color/ColorPrimary</item>
<item name="colorPrimaryDark">@color/ColorPrimaryDark</item>
</style>
EDIT: Ok, donc cela doit être réglé de manière complètement différente. J'ai supposé (parce que je n'avais pas encore beaucoup travaillé avec ToolBar
que lors de l'utilisation de setActionBar(toolbar)
, la ToolBar
personnalisée était automatiquement ajoutée à l'affichage du contenu, mais ce n'était pas le cas.
Le gros problème est donc que la ToolBar
n'est jamais ajoutée à la vue de contenu actuelle et ne sera donc visible jamais tant que vous n'aurez pas ajouté la ToolBar
à la vue de contenu actuelle.
Il existe différentes approches, mais je ne montrerai que l'une d'entre elles.
Au lieu d'avoir un fichier toolbar.xml
, vous devez ajouter la ToolBar
directement dans le fichier de mise en page de la Activity
.
Voici un exemple de la classe Activity
et du code XML à associer à la Activity
:
MainActivity.Java
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
if(toolbar != null) {
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("My custom toolbar!");
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
}
}
activity_main.xml
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context=".MainActivity">
<Android.support.v7.widget.Toolbar xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="100dp"
Android:background="@Android:color/holo_red_light"
Android:minHeight="100dp">
</Android.support.v7.widget.Toolbar>
</RelativeLayout>
Votre fichier styles.xml
est correct tel quel.
Il est important de noter qu'après avoir défini votre ActionBar
sur la ToolBar
personnalisée, vous utilisez les méthodes par défaut pour modifier l'apparence de ActionBar
. Par exemple, la définition du titre doit être définie à partir de getSupportActionBar().setTitle()
et non à partir de toolbar.setTitle()
.
Tutoriel: http://www.viralandroid.com/2015/08/Android-toolbar-example.html
styles.xml
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
<!-- Customize your theme here. -->
</style>
fichier de mise en page
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:minHeight="?attr/actionBarSize"
Android:background="#2196F3"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
</Android.support.v7.widget.Toolbar>
Java
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Dans manifeste, ajoutez ce qui suit ...
<activity Android:name=".Activity.ToolbarActivity"
Android:label="@string/yourStringTitle"
/>
J'espère que cela t'aides