resolucion pantalla mejorar como china celular cambiar aplicacion ajustar achicar android android-layout android-fragments androiddesignsupport android-navigationview

pantalla - En Android, ¿cómo configurar la imagen y el nombre del encabezado del cajón de navegación mediante programación en el archivo de clase?



como achicar la pantalla de mi celular (13)

Aquí está mi código a continuación perfectamente funcionando No agregue el encabezado en la etiqueta NavigationView en activity_main.xml

<include layout="@layout/app_bar_main" android:layout_width="match_parent" android:layout_height="match_parent" /> <android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:menu="@menu/activity_main_drawer" app:itemBackground="@drawable/active_drawer_color" />

agregar encabezado mediante programación con el siguiente código

View navHeaderView = navigationView.inflateHeaderView(R.layout.nav_header_main); headerUserName = (TextView) navHeaderView.findViewById(R.id.nav_header_username); headerMobileNo = (TextView) navHeaderView.findViewById(R.id.nav_header_mobile); headerMobileNo.setText("+918861899697"); headerUserName.setText("Anirudh R Huilgol");

En Android Studio 1.4.1, he creado un nuevo proyecto Drawer Drawer que es el predeterminado. Mi problema es que en este proyecto hay un archivo nav_header_main.xml que es para la imagen y el nombre del encabezado de navegación. Quiero que esta imagen y este nombre se establezcan mediante programación en mi actividad de clase principal. Cómo hacer esto, intenté mucho pero la aplicación se bloquea.

nav_header_main.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:layout_width="match_parent" android:id="@+id/headerView" android:layout_height="@dimen/nav_header_height" android:background="@drawable/side_nav_bar" android:gravity="bottom" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:theme="@style/ThemeOverlay.AppCompat.Dark"> <ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="@dimen/nav_header_vertical_spacing" android:src="@android:drawable/sym_def_app_icon" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingTop="@dimen/nav_header_vertical_spacing" android:text="Android Studio" android:textAppearance="@style/TextAppearance.AppCompat.Body1" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="[email protected]" /> </LinearLayout>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout 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" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:openDrawer="start"> <include layout="@layout/app_bar_main" android:layout_width="match_parent" android:layout_height="match_parent" /> <android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:headerLayout="@layout/nav_header_main" app:menu="@menu/activity_main_drawer" /> </android.support.v4.widget.DrawerLayout>

MainActivity.Class

import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.NavigationView; import android.support.design.widget.Snackbar; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.LinearLayout; import android.widget.Toast; public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); LinearLayout headerImageView= (LinearLayout) findViewById(R.id.headerView); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); drawer.setDrawerListener(toggle); toggle.syncState(); NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); navigationView.setNavigationItemSelectedListener(this); } @Override public void onBackPressed() { DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); if (drawer.isDrawerOpen(GravityCompat.START)) { drawer.closeDrawer(GravityCompat.START); } else { super.onBackPressed(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { Toast.makeText(getApplicationContext(),"working",Toast.LENGTH_LONG).show(); return true; } return super.onOptionsItemSelected(item); } @SuppressWarnings("StatementWithEmptyBody") @Override public boolean onNavigationItemSelected(MenuItem item) { // Handle navigation view item clicks here. int id = item.getItemId(); if (id == R.id.nav_camara) { // Handle the camera action } else if (id == R.id.nav_gallery) { } else if (id == R.id.nav_slideshow) { } else if (id == R.id.nav_manage) { } else if (id == R.id.nav_share) { } else if (id == R.id.nav_send) { } DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); return true; } }


Como se menciona en el error 190226 , desde la versión 23.1.0, obtener la vista de diseño del encabezado con: navigationView.findViewById(R.id.navigation_header_text) ya no funciona.

Una solución alternativa es inflar la vista de encabezado mediante programación y encontrar la vista por ID desde la vista de encabezado inflado.

Por ejemplo:

View headerView = navigationView.inflateHeaderView(R.layout.navigation_header); headerView.findViewById(R.id.navigation_header_text);

Idealmente, debería haber un método getHeaderView() pero ya se ha propuesto, veamos y esperemos a que se publique en la versión de lanzamiento de la biblioteca de soporte de diseño.


En kotlin

val hView = nav_view.getHeaderView(0) val textViewName = hView.findViewById(R.id.textViewName) as TextView val textViewEmail = hView.findViewById(R.id.textViewEmail) as TextView val imgvw = hView.findViewById(R.id.imageView) as ImageView imgvw.setImageResource(R.drawable.ic_menu_gallery)


Es una publicación antigua, pero es nueva para mí. Por lo tanto, es sencillo! En esta parte del código:

public boolean onNavigationItemSelected(MenuItem item) {

}, Vinculé un ImageView a LinearLayout, que contiene el ImageView del ejemplo, que se enumera a continuación. Mente: es el mismo código que obtienes cuando comienzas un nuevo proyecto y eliges la plantilla "Actividad del cajón de navegación":

<ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="@dimen/nav_header_vertical_spacing" android:src="@android:drawable/sym_def_app_icon" />

Di LinearLayout e ID, dentro de nav_header_main.xml (en mi caso elegí ''navigation_header_container'', así que fue de esta manera:

LinearLayout lV = (LinearLayout) findViewById(R.id.navigation_header_container); ivCloseDrawer = (ImageView) lV.findViewById(R.id.imageView); ivCloseDrawer.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { drawer.closeDrawer(GravityCompat.START); } });

Nota: Tengo un ImageView privado ivCloseDrawer declarado en la parte superior, antes de onCreate (MainActivity).

¡Funcionó bien! Espero que ayude, Saludos cordiales.


Primero debe acceder al cajón de navegación en su MainActivity (o la actividad de llamada) de esta manera:

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);

Luego debe eliminar el diseño del encabezado de activity_main.xml porque el diseño se inflará programáticamente en MainActivity. Su activity_main.xml debería verse así:

<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout 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" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:openDrawer="start"> <include layout="@layout/app_bar_main" android:layout_width="match_parent" android:layout_height="match_parent" /> <android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:menu="@menu/activity_main_drawer" /> </android.support.v4.widget.DrawerLayout>

Luego, en su MainActivity, inflamos el diseño nav_header_main y obtenemos acceso a sus vistas, en este caso ImageView y TextView

//inflate header layout View navView = navigationView.inflateHeaderView(R.layout.nav_header_main); //reference to views ImageView imgvw = (ImageView)navView.findViewById(R.id.imageView); TextView tv = (TextView)navView.findViewById(R.id.textview); //set views imgvw.setImageResource(R.drawable.your_image); tv.setText("new text"); navigationView.setNavigationItemSelectedListener(this);

Puedes leer más here


Sé que esta es una publicación antigua, pero estoy seguro de que esto podría ayudar a alguien en el futuro.

Simplemente puede obtener el elemento headerView de la vista de navegación haciendo esto:

NavigationView mView = ( NavigationView ) findViewById( R.id.nav_view ); if( mView != null ){ LinearLayout mParent = ( LinearLayout ) mView.getHeaderView( 0 ); if( mParent != null ){ // Set your values to the image and text view by declaring and setting as you need to here. } }

Espero que esto ayude a alguien.


También puedes usar las funciones de Kotlinx

val hView = nav_view.getHeaderView(0) hView.textViewName.text = "lorem ipsum" hView.imageView.setImageResource(R.drawable.ic_menu_gallery)


no agregue encabezado en xml agregue usando código inflando el diseño

View hView = navigationView.inflateHeaderView(R.layout.nav_header_main); ImageView imgvw = (ImageView)hView.findViewById(R.id.imageView); TextView tv = (TextView)hView.findViewById(R.id.textview); imgvw .setImageResource(); tv.settext("new text");


NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); navigationView.addHeaderView(yourview);


EDITAR: funciona con la biblioteca de diseño hasta 23.0.1 pero no funciona en 23.1.0

En el diseño principal xml, tendrá NavigationView definido, en esa app:headerLayout uso app:headerLayout para establecer la vista del encabezado.

<android.support.design.widget.NavigationView android:id="@+id/navigation_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" app:headerLayout="@layout/nav_drawer_header" app:menu="@menu/navigation_drawer_menu" />

Y @layout/nav_drawer_header será el @layout/nav_drawer_header posición de la imagen y los textos.

nav_drawer_header.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="170dp" android:orientation="vertical"> <RelativeLayout android:id="@+id/headerRelativeLayout" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="match_parent" android:layout_height="wrap_content" android:scaleType="fitXY" android:src="@drawable/background" /> <LinearLayout android:layout_width="match_parent" android:layout_height="@dimen/action_bar_size" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:background="#40000000" android:gravity="center" android:orientation="horizontal" android:paddingBottom="5dp" android:paddingLeft="16dp" android:paddingRight="10dp" android:paddingTop="5dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="35dp" android:orientation="vertical" android:weightSum="2"> <TextView android:id="@+id/navHeaderTitle" android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="1" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@android:color/white" /> <TextView android:id="@+id/navHeaderSubTitle" android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="1" android:textAppearance="?android:attr/textAppearanceSmall" android:textColor="@android:color/white" /> </LinearLayout> </LinearLayout> </RelativeLayout> </LinearLayout>

Y en su clase principal, puede manejar Imageview y TextView como otras vistas normales.

TextView navHeaderTitle = (TextView) findViewById(R.id.navHeaderTitle); navHeaderTitle.setText("Application Name"); TextView navHeaderSubTitle = (TextView) findViewById(R.id.navHeaderSubTitle); navHeaderSubTitle.setText("Application Caption");

Espero que esto ayude.


FirebaseAuth firebaseauth = FirebaseAuth.getInstance(); NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); //displays text of header of nav drawer. View headerview = navigationView.getHeaderView(0); TextView tt1 = (TextView) headerview.findViewById(R.id.textview_username); tt1.setText(firebaseauth.getCurrentUser().getDisplayName());//username of logged in user. TextView tt = (TextView) headerview.findViewById(R.id.textView_emailid); tt.setText(firebaseauth.getCurrentUser().getEmail()); //email id of logged in user. final ImageView img1 = (ImageView) headerview.findViewById(R.id.imageView_userimage); Glide.with(getApplicationContext()) .load(firebaseauth.getCurrentUser().getPhotoUrl()).asBitmap().atMost().error(R.drawable.ic_selfie_point_icon) //asbitmap after load always. .into(new SimpleTarget<Bitmap>() { @Override public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { img1.setImageBitmap(resource); } });

He hecho este código por mí mismo con cierta lógica ... Funciona al 100% ... por favor, vota mi ans.

La vista de texto y la vista de imagen son de @ layout / nav_header_main.xml


nav = ( NavigationView ) findViewById( R.id.navigation ); if( nav != null ){ LinearLayout mParent = ( LinearLayout ) nav.getHeaderView( 0 ); if( mParent != null ){ // Set your values to the image and text view by declaring and setting as you need to here. SharedPreferences prefs = getSharedPreferences("user_data", MODE_PRIVATE); String photoUrl = prefs.getString("photo_url", null); String user_name = prefs.getString("name", "User"); if(photoUrl!=null) { Log.e("Photo Url: ", photoUrl); TextView userName = mParent.findViewById(R.id.user_name); userName.setText(user_name); ImageView user_imageView = mParent.findViewById(R.id.avatar); RequestOptions requestOptions = new RequestOptions(); requestOptions.placeholder(R.drawable.ic_user_24dp); requestOptions.error(R.drawable.ic_user_24dp); Glide.with(this).load(photoUrl) .apply(requestOptions).thumbnail(0.5f).into(user_imageView); } } }

Espero que esto ayude.


NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); View hView = navigationView.getHeaderView(0); TextView nav_user = (TextView)hView.findViewById(R.id.nav_name); nav_user.setText(user);

¡espero que esto ayude!