personalizado - Personalización de NavigationView: adición de headerView dinámico, biblioteca de diseño de soporte de Android
toolbar android (8)
Probé la navegación desde la nueva biblioteca de diseño de soporte para Android. Quiero tener una vista de cabeza dinámica. Básicamente, mi vista de frente mostrará algo así como la cita del día. Tengo como unas 10 citas y quiero seleccionar aleatoriamente una cita y mostrarla en una vista de texto en headerView. También quiero agregar el método onClick para headerView.
En este momento, no veo ninguna posibilidad de cambiar el diseño de headerview programáticamente. ¿Alguna sugerencia para implementar esto?
Después de la nueva actualización de la biblioteca de soporte (23.1.1),
Podrías hacer esto ...
Agregue headerview en la app:headerLayout="@layout/drawer_header"
dentro de NavigationView.
Entonces, puedes acceder a ella por,
View header = navigationView.getHeaderView(0);
TextView text = (TextView) header.findViewById(R.id.textView);
o si tienes múltiples encabezados
navigationView.getHeaderCount()
Ref: https://code.google.com/p/android/issues/detail?id=190226#c31
Mi enlace te ayudará
final NavigationView navigationView = (NavigationView) findViewById(R.id.navigation_view);
View headView = navigationView.getHeaderView(0);
((TextView) headView.findViewById(R.id.nav_title)).setText("New title");
Primero tienes que obtener navigationView. NavigationView navigationView =(NavigationView)findViewById(R.id.nav_view);
Luego encabezado. View header = navigationView.getHeaderView(0)
Luego, textView. TextView text = (TextView) header.findViewById(R.id.textView);
Y, finalmente, puede configurar el texto que desea mostrar. text.setText("Hello there");
Puede agregar su encabezado personalizado programáticamente llamando a addHeaderView
en su navigationView, o definirlo en el archivo de diseño usando app:headerLayout="@layout/myheader"
.
Puede usar findViewById()
para acceder a los elementos del encabezado dentro de NavigationView. Esto funciona incluso si ha inicializado el encabezado con la propiedad headerLayout, por ejemplo, app:headerLayout="@layout/drawer_header"
. Luego puede modificar dinámicamente el encabezado sin necesidad de inflar o agregar un nuevo encabezado.
@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;
}
...
drawer_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">
...
Creo que Dhawal está diciendo lo mismo, pero no fue muy claro.
primero crea un XML de encabezado como lay_header.xml
<TextView
android:id="@+id/tvThought"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
en su archivo java infle este encabezado anterior en un TextView. me gusta
TextView headerView = (TextView) LayoutInflater.from(this).inflate(R.layout.lay_header, null);
headerView.setText("Your_thoght");
Ahora agregalo como HeaderView
navView = (NavigationView) findViewById(R.id.navView);
navView.addHeaderView(headerView);
Eso es...
crear diseño de encabezado tomar vista de texto en el interior,
<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" />
en onCreate,
((TextView) findViewById(R.id.profile_email_text)).setText("test");
Crea método onSelectText
en tu actividad.
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();
}
}
TextView txt2;
txt2 = (TextView) navigationView.inflateHeaderView(R.layout.nav_header_main).findViewById(R.id.textView2);
txt2.setText("wow! It works like a charm");