android - multiple - ¿Hay alguna forma de controlar las vistas dentro del encabezado de NavigationView?
navigation view android (4)
Después de actualizar su biblioteca de soporte a la versión 23.1.1 o superior,
Podrías hacer esto ...
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
Como dice el título, quiero saber si hay alguna forma de controlar las vistas dentro del encabezado de NavigationView
. (Excepto agregar o eliminar encabezado).
Por ejemplo: En el encabezado, tengo un avatar de usuario. De forma predeterminada, muestra una imagen de invitado, pero después de que el usuario inicie sesión, se mostrará el avatar real.
¿Cómo se puede lograr esto?
La otra forma de hacerlo es usando el método "inflateHeaderView ()" del objeto NavigationView, como se muestra a continuación (después de usar "setContentView ()"):
View headerLayout = navigationView.inflateHeaderView(R.layout.yours_nav_header_layout);
Después de este punto, puede usar "headerLayout" para acceder a vistas personalizadas en el diseño de su encabezado, como a continuación:
View cutomView = (TextView) headerLayout.findViewById(R.id.lay_sign_in);
En mi caso, estoy usando el framework ButterKnife para inyectar Ver "navigationView" de esta manera:
@Bind(R.id.nav_view) NavigationView navigationView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
}
Simplemente intenta encontrar tu punto de vista en tu actividad:
tvUserName = (TextView) findViewById(R.id.tv_username);
Esto funciona para mi. Mi diseño de encabezado es:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="192dp"
android:background="?attr/colorPrimaryDark"
android:padding="16dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark"
android:orientation="vertical"
android:gravity="bottom">
<TextView
android:id="@+id/tv_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"/>
</LinearLayout>
Mi NavigationView en el diseño de la actividad es:
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/drawer_header"
app:menu="@menu/menu_drawer"/>
Y por cierto, encontré un problema al inflar LinearLayout, donde no se proporcionan parámetros de diseño:
TextView headerView = (TextView) LayoutInflater.from(this).inflate(R.layout.lay_header, null);
headerView.setText("Your_thoght");
Espero eso ayude.
Ya que no puedo aceptar un comentario como respuesta. Por lo tanto, vuelvo a publicar la respuesta de Moinkhan aquí:
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...
También puede verlo en: Personalización de NavigationView: adición de headerView dinámico, biblioteca de diseño de soporte de Android
¡Muchas gracias! Y de nuevo, necesitamos una función que permita al usuario aceptar un comentario como respuesta.