2012-09-17 7 views
11

¿Es posible cambiar programáticamente el calificador de configuración de recursos? Es decir, el sistema make para algunos dispositivos hdpi tomó recursos de la carpeta xhdpi en lugar de hdpi.Calificador de recursos de cambio de Android programáticamente

+0

Voy a salir de una extremidad aquí y decir "usted no quiere esto". Es una selección divertida de recursos de bestias viejas, especialmente cuando se trata de admitir pre y post Android 3.1. – OceanLife

Respuesta

0

No estoy seguro si puedes. No me malinterpreten: personalmente también me gustaría saber la respuesta a esto. ¿Qué es exactamente lo que le gustaría hacer?

Si va a hacer las cosas programáticamente de todos modos, sería mejor poner el activo en dibujable directo, y luego aplicar escalado. Usted puede obtener el multiplicador densidad bastante facilidad

+0

Gracias por responder. En mi proyecto tengo recursos de imágenes ldpi, mdpi, hdpi y xhdpi. Para Kindle Fire (1024 x 600 - 169 ppp), el sistema Android toma recursos de la carpeta mdpi y la aplicación se ve muy mal. Quiero hacer que Android tome recursos de la carpeta hdpi. – Yomodo

0

Kindle tiene una gran pantalla pero con densidad media

Se necesita la disposición de res/layout-grande/your.xml

Pero las imágenes de res/estirable/mdpi así que crear una carpeta llamada res/estirable/mdpi a gran

esperanza que esto funcionará para usted, pero las imágenes deben estar de acuerdo con la resolución del Kindle

1

En mi proyecto tengo ldpi, mdpi, hdpi y xhdpi recursos de imagen. Para Kindle Fire (1024 x 600 - 169 ppp), el sistema android toma recursos de la carpeta mdpi y la aplicación se ve muy mal. I quiero hacer que Android tome recursos de la carpeta hdpi.

Relacionado a tu comentario Generalmente proporciono recursos solo para la pantalla hdpi y todas las demás densidades funcionan bien. ¡Pruebas en dispositivos 2.1+ o 2.2+ a los que normalmente me dirijo!

Entiendo el riesgo que no está documentado, por lo que no se supone que funcione, ¡aunque sí funciona! De esa manera evito el KB de mi apk final.

Pero no sugiero usar xhdpi en lugar de hdpi, ya que xhdpi solo funciona en dispositivos 3+ o algo.

sólo para las pruebas diferentes densidades en un solo dispositivo puede cambiar AVD por:

am display-density 480 

véase el documento androide para más información: http://developer.android.com/tools/help/adb.html#shellcommands

0

probar este código. Espero eso ayude.

import android.util.DisplayMetrics; 

    private int result = 0; //Activity member 

    public void determineDeviceResolution { 

    switch(metrics.densityDpi) 
    {  
     case DisplayMetrics.DENSITY_LOW: 
     { 
      result = DisplayMetrics.DENSITY_LOW; 
      break; 
     } 

     case DisplayMetrics.DENSITY_MEDIUM: 
     { 
      result = DisplayMetrics.DENSITY_MEDIUM; 
      break; 
     } 

     case DisplayMetrics.DENSITY_HIGH: 
     { 
      result = DisplayMetrics.DENSITY_HIGH; 
      break; 
     } 

     default: 
      break;   
    } 

    } 


    private Drawable getDrawable(String icon) { 

    //Pass file name of the resource file 
    //while invoking this method for e.g. play_icon.png 


    //You can specify the folder from which resource 
    //needs to be picked for e.g. drawable_hd,drawable_xhdpi etc.. 

    Drawable drawable = null; 

    if(result == DisplayMetrics.DENSITY_HIGH) 
    { 

       drawable=create_drawable("/drawable_hd/" + icon); 

    } 

    else 
    { 
      drawable=create_drawable("/drawable/" + icon); 
    } 

    return drawable; 
} 



    Drawable create_drawable(String absolute_filepath) 
{ 
    InputStream in = null; 

    Bitmap bMap = null; 

    BufferedInputStream buf = null; 

      Drawable d = null; 

    try 
    { 
     in = getClass().getResourceAsStream(absolute_filepath); 
     buf = new BufferedInputStream(in); 
     bMap = BitmapFactory.decodeStream(buf); 

     if(in == null || buf == null || bMap== null) 
     { 
      return null; 
     } 

     if (in != null) 
     { 
      in.close(); 
     } 

     if (buf != null) 
     { 
      buf.close(); 
     } 

    } 

    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 


    d = new BitmapDrawable(bMap); 

    return d; 

} 

Por último, puede pasar el dibujable al método del elemento de interfaz de usuario setBackgroundDrawable().

Cuestiones relacionadas