2015-11-25 4 views
2

Это мой header.xmlКак установить аватар пользователя для навигационного ящика через url в android?

<?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="@dimen/nav_header_height" 
    android:background="@drawable/side_nav_bar" 
    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" android:orientation="vertical" 
    android:gravity="bottom"> 

    <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" android:id="@+id/imageView" /> 

    <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:layout_width="wrap_content" android:layout_height="wrap_content" 
     android:text="[email protected]" android:id="@+id/textView" /> 

</LinearLayout> 

Это мой OnCreate метод, я использую навигации вид

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     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(); 

     ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(MainActivity.this)); 
     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 
     ImageView imageView = (ImageView) navigationView.getHeaderView(0).findViewById(R.id.imageView); 
     ImageLoader.getInstance().displayImage("https://www.google.co.in/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png", imageView); 
    } 

Я попытался это, но изображение не меняется вообще? Nothings происходит, я включил universalimageloader.jar и добавил все зависимости тоже. что может быть проблемой?

+0

Как насчет использования нового навигационного экрана Android? Это официальная библиотека поддержки Android и работает так же, как и ваша библиотека! –

+0

Даже если я использую библиотеку поддержки Android, как загрузить изображение с URL-адреса? – Veer3383

ответ

2

Я предполагаю, что вы используете NavigationView из Android Design Support Library как в ссылке: Android blogspot

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 

<!-- your content layout --> 

<android.support.design.widget.NavigationView 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     app:headerLayout="@layout/drawer_header" 
     app:menu="@menu/drawer"/> 
</android.support.v4.widget.DrawerLayout> 

С 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="100dp" 
      android:gravity="bottom" 
      android:orientation="vertical" 
      android:theme="@style/ThemeOverlay.AppCompat.Dark"> 
<ImageView 
    android:id="@+id/ivHeader" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 
</LinearLayout> 

Это, как я загружаю изображение для ImageView в заголовке, используя UniversalImageLoader:

initImageLoader(this); 
NavigationView navigationView = (NavigationView) findViewById(R.id.navigation); 
ImageView imageView = (ImageView) navigationView.getHeaderView(0).findViewById(R.id.ivHeader); 
ImageLoader.getInstance().displayImage("YourImageUrl", imageView); 

Обратите внимание, что из версии compile 'com.android.support:design:23.1.1', HeaderView можно найти с помощью navigationView.getHeaderView(0). Надеюсь, поможет.

+0

Я отредактировал свой ответ, пожалуйста, помогите с этим – Veer3383

+0

У меня есть некоторые проблемы с этим решением. В ImageView у меня есть два TextView (Шаблон навигационного ящика). После загрузки и установки изображения в ящик навигации я потерял эти два TextView, и я вижу только это изображение. Я хочу только обновить небольшое место круга для аватара пользователя, а не всего заголовка Navigation Drawer. Как я могу это исправить? – Kostya

+0

@ Kostya, вы должны создать новый вопрос и опубликовать свой xml/code для каждого 1, может помочь вам легче. –

0

Ответ Кингфишера правильный, но кэширование изображений нехорошо, я пытался использовать, библиотеку ионов и ее функционал тоже .. и кэширует изображение лучше.

OnCreate 
{ 
     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 
     imageView = (ImageView) navigationView.getHeaderView(0).findViewById(R.id.imageView); 
loadWebImage(imageView); 
} 

    private void loadWebImage(final ImageView imageView) { 
      final String URL = "http://d22r54gnmuhwmk.cloudfront.net/app-assets/global/default_user_icon-7a95ec473c1c41f6d020d32c0504a0ef.jpg"; 
      Ion.with(this).load(URL).asBitmap().setCallback(new FutureCallback<Bitmap>() { 
       @Override 
       public void onCompleted(Exception e, Bitmap result) { 
        if (e == null) { 
         imageView.setImageBitmap(result); 
        } else { 
         Toast.makeText(getApplicationContext(),e.toString(),Toast.LENGTH_LONG).show(); 

         Toast.makeText(getApplicationContext(),"not found",Toast.LENGTH_LONG).show(); 
         imageView.setImageResource(R.mipmap.ic_launcher); 
        } 
       } 
      }); 
     }