Je veux ajouter une icône/un bouton cliquable à gauche du titre dans la barre d'action. Comment le faire? Voici le code avec lequel j'ai ajouté l'icône de recherche et de réglage dans la barre d'action. Ils apparaissent à droite. Mais je veux ajouter une nouvelle icône à la gauche du titre. Comment le faire? 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=".ui.home.activities.TransactionSearchActivity">
<item
Android:id="@+id/action_search"
Android:icon="@Android:drawable/ic_menu_search"
Android:title="search"
app:actionViewClass="Android.support.v7.widget.SearchView"
app:showAsAction="always" />
<item Android:id="@+id/action_setting"
Android:title="categories"
Android:icon="@drawable/icon_settings_h"
app:showAsAction="always"
/>
ACTIVITÉ PRINCIPALE
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return true;
}
Vous pouvez faire ce qui suit:
1- Créez votre fichier nom_fichier.xml puis ajoutez Toolbar
.
2- ajouter RelativeLayout
dans la balise Toolbar
.
3- ajoutez vos vues c'est-à-dire (ImageButton
, TextView
, ...)
Remarque: La TextView
que vous ajoutez est le titre de Toolbar
.
Exemple de code: nom_fichier.xml
<Android.support.v7.widget.Toolbar
Android:id="@+id/products_toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:background="@color/colorPrimaryDark"
app:layout_collapseMode="pin"
app:titleTextColor="@Android:color/white">
<RelativeLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<TextView
Android:id="@+id/toolbar_title"
Android:layout_width="wrap_content"
Android:layout_height="match_parent"
Android:text="Title"
Android:gravity="center"
Android:textColor="@Android:color/white"
Android:textSize="20dp"
Android:textStyle="bold"
Android:layout_alignParentStart="true"/>
<ImageButton
Android:id="@+id/toolbar_button"
Android:layout_width="wrap_content"
Android:layout_height="match_parent"
Android:src="@drawable/ic_icon_24dp"
style="@style/Widget.AppCompat.Button.Borderless"
Android:layout_alignParentEnd="true"/>
</RelativeLayout>
</Android.support.v7.widget.Toolbar>
Sortie:
Vous pouvez afficher une icône à gauche en utilisant le code suivant.
getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME |
ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_USE_LOGO);
actionBar.setIcon(R.drawable.ic_launcher);
Mais ce ne sera pas cliquable. Pour créer une icône cliquable à gauche, vous devez utiliser la barre d'outils au lieu d'une barre d'actions.
Une chose est que, par défaut, le titre et l'icône de l'application sont définis à gauche et autres que les icônes envoyées à droite. Si vous souhaitez ajouter vos icônes dans le côté gauche, il existe un moyen de les utiliser dans le côté gauche, à savoir:
étape 1. créer une mise en page personnalisée avec recherche, icône de réglage et votre titre comme vous le souhaitez.
étape 2. créer une mise en page de barre d'outils comme:
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:titleTextColor="#ffffff"
Android:background="#ECA539"
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
étape 3. gonflez votre mise en page personnalisée dans la barre d'outils de la manière suivante:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initToolbar();
}
private void initToolBar() {
setSupportActionBar(toolbar);
View customlayout= getLayoutInflater().inflate(R.layout.custom_layout, null);
toolbar.addView(logo);
}
J'aime toujours mettre un AppBarLayout que je peux contrôler la façon dont la barre d'outils apparaît
<Android.support.design.widget.AppBarLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:theme="@style/AppTheme.AppBarOverlay">
<RelativeLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbarAddPlan"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:background="?attr/colorPrimary"
Android:layout_marginLeft="50dp"
app:popupTheme="@style/AppTheme.PopupOverlay" >
</Android.support.v7.widget.Toolbar>
<ImageButton
Android:id="@+id/btnAddPlanTourClose"
style="@style/Widget.AppCompat.Button.Borderless"
Android:layout_width="45dp"
Android:layout_height="45dp"
Android:layout_alignParentLeft="true"
Android:layout_alignParentStart="true"
Android:layout_centerVertical="true"
Android:src="@drawable/close_circle_outline" />
</RelativeLayout>
</Android.support.design.widget.AppBarLayout>
De cette façon, vous pouvez mettre plus d'éléments et les arranger comme je le veux. Dans ce cas, insérez une icône de gauche pour fermer l’activité par un fragment.
Donc dans le fragment faire cela
//That is in the Fragment
setupToolbar(R.id.toolbarAddPlan,getString(R.string.addPlanTour),true)
//It is in na Kotlin Extansion file.
inline fun Fragment.setupToolbar(@IdRes id: Int, title:String?= null, upNavigation: Boolean = false) : ActionBar {
val activityCompat = activity as AppCompatActivity
val toolbar = activity?.findViewById<Toolbar>(id)
activityCompat.setSupportActionBar(toolbar)
if(title != null){
activityCompat.supportActionBar?.title = title
}
activityCompat.supportActionBar?.setHomeButtonEnabled(true)
return activityCompat.supportActionBar!!
}
Le résultat sera quelque chose comme ça:
L'action "SALVAR" que j'ai mise via le menu inflat
override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
super.onCreateOptionsMenu(menu, inflater)
inflater?.inflate(R.menu.menu_add_plan_tour,menu)
}
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
return when (item?.itemId){
R.id.menuPlanTourSave ->{
true
}else ->return super.onOptionsItemSelected(item)
}
}
Disposition XML du menu src/menu/menu_add_plan_tour.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto">
<!-- "Mark Favorite", should appear as action button if possible -->
<item
Android:id="@+id/menuPlanTourSave"
Android:title="@string/btnSave"
Android:tooltipText="@string/btnSave"
Android:contentDescription="@string/btnSave"
app:showAsAction="always|withText">
<TextView
Android:text="@string/btnSave"
Android:textSize="15dp"
Android:textColor="@color/colorPrimaryLight"
/>
</item>
</menu>
Et n'oubliez pas d'utiliser setHasOptionsMenu (true) pour activer le menu.
Comme il s'agit d'une ère mise à jour d'Android, vous devez utiliser la barre d'outils pour pouvoir effectuer tout type de personnalisation à l'aide de XML. Au lieu d'utiliser le menu, je suggère d'utiliser la barre d'outils
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_alignParentBottom="true"
Android:background="#ffffa302"
Android:minHeight="@Android:dimen/notification_large_icon_height">
<ImageButton
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:id="@+id/imageButton"
Android:layout_gravity="left"
Android:drawable="@drawable/pinterest_pin"
Android:clickable="true"/>
</Android.support.v7.widget.Toolbar>
Et par le code, vous pouvez gérer l'événement