2017-05-11 5 views
0

Ich versuche, ein paar Linearlayouts hinzuzufügen, die jeder eine TextView und eine ImageView bei Laufzeit enthält.OutOfMemoryError wenn Image Einstellung

Alles funktioniert, aber die Anwendung stürzte bei dem Versuch zu setImageResource. (OutOfMemoryError)

Heres meine Aktivität (relevanter Teil).

my_icon ist der Name des ziehbar in res Ordner (der Name ist anders in jeder Schleife (Name von xml kommt)

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



        } 

Hilfe Methode

public String removeFileExtensionFromString(String str){ 
    return str.substring(0, str.indexOf(".")); 
} 
+0

Sie diese Frage finden Sie hier: http://stackoverflow.com/questions/33279223/outofmemory-while-setting-image-in-imageview –

+0

Gelöst ... Bilder auch groß waren ... nur reduziert die Größen. – skm

+0

Ich bin mir nicht sicher über diese Methode "getDrawableRessorceIdByName", Sie könnten diese Methode stattdessen "Resources.getIdentifier" verwenden oder wahrscheinlich schon verwenden. – vsatkh

Antwort

0

Es gibt zwei Möglichkeiten, um dieses Problem zu lösen.

1.Try die Größe des Bildes zu reduzieren [DRINGEND EMPFOHLEN]

  • Sie tinyJPG.com besuchen können die Größe zu reduzieren und auch die Qualität des Bildes zu erhalten.

  • Stellen Sie sicher, dass Sie nicht sehr hohe Auflösung Bild als Sie sind nicht nützlich.

2.Use largeHeap [ABGERATEN]

  • hinzufügen largeHeap = "true" in Ihrem Manifest.

  • Dies kann die Leistung der App ein wenig reduzieren.