J'ai essayé la navigationView à partir de la nouvelle bibliothèque de conception de support Android. Je veux avoir une tête dynamique. Fondamentalement, mon aperçu va montrer quelque chose comme une citation du jour. J'ai comme environ 10 citations et je veux choisir au hasard une citation et l'afficher dans un textview dans l'en-tête. Je veux aussi ajouter la méthode onClick pour la headerView.
À l'heure actuelle, je ne vois aucune possibilité de changer la disposition de la tête par programme. Des suggestions pour implémenter ceci?
créez d'abord un en-tête XML comme lay_header.xml
<TextView
Android:id="@+id/tvThought"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
sur votre fichier Java, gonflez cet en-tête ci-dessus dans un TextView. comme
TextView headerView = (TextView) LayoutInflater.from(this).inflate(R.layout.lay_header, null);
headerView.setText("Your_thoght");
Maintenant, ajoutez-le en tant que HeaderView
navView = (NavigationView) findViewById(R.id.navView);
navView.addHeaderView(headerView);
C'est tout...
Après la nouvelle mise à jour de la bibliothèque de support (23.1.1),
Tu pourrais faire ça -
Ajoutez l’aperçu dans le app:headerLayout="@layout/drawer_header"
de NavigationView.
Ensuite, vous pouvez y accéder par,
View header = navigationView.getHeaderView(0);
TextView text = (TextView) header.findViewById(R.id.textView);
ou si vous avez plusieurs en-têtes
navigationView.getHeaderCount()
Réf.: https://code.google.com/p/Android/issues/detail?id=190226#c31
TextView txt2;
txt2 = (TextView) navigationView.inflateHeaderView(R.layout.nav_header_main).findViewById(R.id.textView2);
txt2.setText("wow! It works like a charm");
créer une disposition d'en-tête prend la vue du texte à l'intérieur,
<TextView
Android:id="@+id/profile_email_text"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_alignLeft="@id/profile_image"
Android:layout_alignParentBottom="true"
Android:layout_toLeftOf="@id/expand_account_box_indicator"
Android:ellipsize="end"
Android:maxLines="1"
Android:paddingBottom="16dp"
Android:singleLine="true"
Android:clickable="true"
Android:onClick="onSelectText"
Android:text="[email protected]"
Android:textColor="@color/body_text_2_inverse"
Android:textSize="@dimen/text_size_medium" />
dans onCreate,
((TextView) findViewById(R.id.profile_email_text)).setText("test");
créer la méthode onSelectText
dans votre activité
public void onSelectText(View v){
if(v.getId() == R.id.profile_email_text){
Snackbar
.make(fab, "clicked on sub title", Snackbar.LENGTH_LONG)
//.setAction(R.string.snackbar_action, myOnClickListener)
.show();
drawer_layout.closeDrawers();
}
}
Vous pouvez utiliser findViewById()
pour accéder aux éléments d’en-tête dans NavigationView. Cela fonctionne même si vous avez initialisé l'en-tête avec la propriété headerLayout, par exemple. app:headerLayout="@layout/drawer_header"
. Vous pouvez ensuite modifier dynamiquement l'en-tête sans avoir à gonfler ou ajouter un nouvel en-tête.
@Override
public boolean onNavigationItemSelected(final MenuItem menuItem) {
...
if(mNavItemId == R.id.drawer_item_1)
{
View headerView = mNavigationView.findViewById(R.id.drawer_header_root);
// Test modifying the size of the header root element (FrameLayout)
// when the first menu item is clicked.
LinearLayout.LayoutParams p = (LinearLayout.LayoutParams) headerView.getLayoutParams();
p.height = p.height == 700 ? 400 : 700;
headerView.setLayoutParams(p);
return true;
}
...
tiroir_header.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="196dp"
Android:background="@color/drawer_header_bg"
Android:orientation="vertical"
Android:id="@+id/drawer_header_root">
...
Je pense que Dhawal dit la même chose, mais ce n'était pas très clair.
Vous pouvez ajouter votre en-tête personnalisé par programme en appelant addHeaderView
sur votre navigationView ou le définir dans le fichier de présentation à l'aide de app:headerLayout="@layout/myheader"
.
Mon être ce lien va vous aider
final NavigationView navigationView = (NavigationView) findViewById(R.id.navigation_view);
View headView = navigationView.getHeaderView(0);
((TextView) headView.findViewById(R.id.nav_title)).setText("New title");