0

I am trying to add a few Linearlayouts which every one contains a TextView and an ImageView at runtime.

Everything works but the application crashed when trying to setImageResource. (OutOfMemoryError)

Heres my Activity (relevant part):

my_icon is the name of the drawable in res folder (the name is different in every loop (name comes from xml).

// looping through all item nodes <item>
                    for (int i = 0; i < nl.getLength(); i++) {
                        Element e = (Element) nl.item(i);

                        String my_icon = parser.getValue(e, "my_icon"); // my_icon child value
                        int my_count = Integer.parseInt(parser.getValue(e, "my_count")); // my_count child value
                        String my_text = parser.getValue(e, "my_text"); // my_text child value

                        //Create Child-Views
                        LinearLayout tempLinearLayout = new LinearLayout(AnleitungActivity.this);
                        linearLayout.addView(tempLinearLayout);
                            tempLinearLayout.setOrientation(LinearLayout.HORIZONTAL);
                            ViewGroup.LayoutParams params = tempLinearLayout.getLayoutParams();
                            params.width = ViewGroup.LayoutParams.MATCH_PARENT;
                            params.height = 240;
                            tempLinearLayout.setBackgroundColor(ContextCompat.getColor(AnleitungActivity.this, R.color.anleitung_kachel_hintergrundfarbe));

                            ViewGroup.MarginLayoutParams marginParams = (ViewGroup.MarginLayoutParams) tempLinearLayout.getLayoutParams();
                            marginParams.setMargins(0,5,0,0); //für die Margin-Werte brauchen wir extra MarginLayoutParams...
                            tempLinearLayout.setLayoutParams(params); //layoutParams setzen
                            tempLinearLayout.setLayoutParams(marginParams); //MarginLayoutParams setzen

                        TextView tv = new TextView(AnleitungActivity.this);
                        tempLinearLayout.addView(tv);
                            LinearLayout.LayoutParams tvParams  = new LinearLayout.LayoutParams(70, ViewGroup.LayoutParams.MATCH_PARENT,1f);
                            tv.setLayoutParams(tvParams);
                            tv.setText(transformText(my_text));
                            tv.setTextSize(17);
                            tv.setPadding(5,0,0,0);
                            tv.setTextColor(ContextCompat.getColor(AnleitungActivity.this, R.color.anleitung_text_farbe));

                        ImageView imageView = new ImageView(AnleitungActivity.this);
                        tempLinearLayout.addView(imageView);
                            imageView.getLayoutParams().height = dp2px(getResources(), 60);
                            imageView.getLayoutParams().width = dp2px(getResources(), 60);
                            imageView.setImageResource(getDrawableRessorceIdByName(AnleitungActivity.this, removeFileExtensionFromString(my_icon)));



                    }

help method

    public String removeFileExtensionFromString(String str){
    return str.substring(0, str.indexOf("."));
}
skm
  • 559
  • 1
  • 6
  • 22
  • you can find this question here : http://stackoverflow.com/questions/33279223/outofmemory-while-setting-image-in-imageview – an_droid_dev May 11 '17 at 14:46
  • Solved...Images were too big...just reduced the sizes. – skm May 11 '17 at 14:52
  • I am not sure about this method "getDrawableRessorceIdByName", you might to use this method instead "Resources.getIdentifier" or probably you already use it. – vsatkh May 11 '17 at 14:56
  • It´s working, read my comment before your´s – skm May 11 '17 at 15:07

1 Answers1

0

There are two ways to solve this problem.

1.Try to reduce the size of image [ HIGHLY RECOMMENDED]

  • You can visit tinyJPG.com to reduce the size and also maintain the quality of image.

  • Make sure you didn't use very high resolution image as they are not useful.

2.Use largeHeap [NOT RECOMMENDED]

  • Add largeHeap="true" in your Manifest.

  • This may reduce the performance of app a little bit.

Ranjan
  • 390
  • 2
  • 10