Inflated ImageView to put in GalleryView isn't the right size

I am trying to inflate an ImageView that scales a Drawable that I can display in a GalleryView. My code to inflate the view seems to work fine, except that the attributes of the ImageView are not applied. Specifically, the inflated ImageView does not have the width/height that I set for it via the android:layout params in XML.

Can someone show me what I’m doing wrong?

  • Android - Try to send fake sms to myself without mobile network usage
  • Android, Java: HTTP POST Request
  • Toolbar with EditText material design
  • Sending a JSON HTTP POST request from Android
  • How to insert a new line in strings in Android
  • Android strings.xml Best Practices?
  • I want to set the width/height of the image in dp, so that it is the correct size across multiple screen dpis and support Android 1.5+. As a result I cannot use something like:

    i.setLayoutParams(new Gallery.LayoutParams(150, 116)
    

    My layout definition is:

    <?xml version="1.0" encoding="utf-8"?>
    <ImageView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="150dp" android:layout_height="116dp"
        android:background="@drawable/gallery_item_background"
        android:scaleType="fitXY" />
    </ImageView>
    

    And the snippet I am using to inflate the ImageView is:

        public View getView(int position, View convertView, ViewGroup parent) {
            LayoutInflater inflater = getLayoutInflater();
            ImageView i = (ImageView) inflater.inflate(R.layout.gallery_item, null);
            i.setImageResource(mImageIds.get(position));
            i.setScaleType(ImageView.ScaleType.FIT_XY);
    
            return i;
        }
    

  • Why does the Android emulator report “unknown virtual device”, when the device is in my user directory?
  • Proxy which requires authentication with Android Emulator
  • Error:Gradle: Execution failed for task ':app:crashlyticsCleanupResourcesDebug'. > Crashlytics Developer Tools error
  • Is it possible to dither a gradient drawable?
  • Sharing images and text with Facebook on Android
  • Expand ListView item with animation
  • 2 Solutions collect form web for “Inflated ImageView to put in GalleryView isn't the right size”

    The trick is simply to use the following version of inflate():

    inflater.inflate(R.layout.gallery_item, parent, false);
    

    The last two parameters are mandatory. If you pass “null” as the parent, the inflater does not know what type of layout parameters to create and therefore ignores all the android:layout_ XML attributes. The last parameter simply tells the inflater to not add the inflated view to the parent right away. If you pass true (at least inside an Adapter’s getView() method), bad things will happen.

    I’m not sure but this might work. Give an id to your imageview in your xml (say it is “@+id/image”:

    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = getLayoutInflater();
        View view = (View) inflater.inflate(R.layout.gallery_item, null);
        ImageView i = (ImageView) view.findViewById(R.id.image);
        i.setImageResource(mImageIds.get(position));
        i.setScaleType(ImageView.ScaleType.FIT_XY);
    
        return view;
    }
    

    By the way you should optimize it checking if convertView is null in order to recycle views. Check this: http://code.google.com/events/io/2009/sessions/TurboChargeUiAndroidFast.html

    Android Babe is a Google Android Fan, All about Android Phones, Android Wear, Android Dev and Android Games Apps and so on.