programmera för olika skärmar

Diskussion i 'Frågor, support och diskussion' startad av alioooop, 28 jun 2010.

  1. alioooop

    alioooop Adult Droid Medlem

    Blev medlem:
    16 jan 2010
    Inlägg:
    720
    Mottagna gillanden:
    11

    MINA ENHETER

    tjaa

    hur funkar det egentligen med anpassning av bilder i olika dpi osv?
    om jag gör tre bilder, en för ldpi, en för mdpi och en för hdpi.
    jag lägger bilderna i respektive mapp:

    res/drawable-ldpi/my_icon.png
    res/drawable-mdpi/my_icon.png
    res/drawable-hdpi/my_icon.png

    kommer då android välja rätt bild själv eller måste jag göra en xml design för varje skärmtyp o sedan välja rätt xml i onCreate med hjälp av någon ifsats?

    har redan läst länk men skulle gärna vilja ha ett riktigt exempel eller en bättre förklaring :)
     
  2. johannilsson

    johannilsson Adult Droid Medlem

    Blev medlem:
    23 jun 2009
    Inlägg:
    577
    Mottagna gillanden:
    8

    MINA ENHETER

    Du behöver inte göra någon xml eller manuellt referera till något annat än R.drawable.my_icon i det här fallet. Om du bygger för tidigare versioner än 1.6 kan det bli lite stökigare dock.
     
  3. alioooop

    alioooop Adult Droid Medlem

    Blev medlem:
    16 jan 2010
    Inlägg:
    720
    Mottagna gillanden:
    11

    MINA ENHETER

    har tänkt att detta ska funka för även 1.5 så hur måste jag göra då? :\
     
  4. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 jun 2009
    Inlägg:
    1 768
    Mottagna gillanden:
    44

    MINA ENHETER

    1.5 hade bara support för en skärmupplösning (mdpi), och där används res/drawable. res/drawable är även default om något inte hittas i andra foldrar.

    Har för mig att jag i Snowstorm använder:

    res/drawable-ldpi/my_icon.png
    res/drawable/my_icon.png
    res/drawable-hdpi/my_icon.png

    .. men har inte koden här.
     
  5. DiscoBoy

    DiscoBoy Youth Droid Medlem

    Blev medlem:
    8 jun 2010
    Inlägg:
    157
    Mottagna gillanden:
    9

    MINA ENHETER

    Ett tips är att bygga med sdk 4 och sätta target till 3. Då kan man köra med specialinställningar för de som kör med senare version. Jag har för mig det iaf
     
  6. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 jun 2009
    Inlägg:
    1 768
    Mottagna gillanden:
    44

    MINA ENHETER

    Ja, men det påverkar bara vad man kan ha i sin manifest. Om man använder klasser/metoder som inte finns i 1.5 så får man fel, såvida man inte använder reflection.
     
  7. alioooop

    alioooop Adult Droid Medlem

    Blev medlem:
    16 jan 2010
    Inlägg:
    720
    Mottagna gillanden:
    11

    MINA ENHETER

    okej kan du bekräfta att det är så här snart för vet inte riktigt hur jag ska testa detta ;D
     
  8. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 jun 2009
    Inlägg:
    1 768
    Mottagna gillanden:
    44

    MINA ENHETER

    Ska försöka komma ihåg att kolla det ikväll.

    Btw. Du kan testa det genom att skapa olika emulatorer. En som kör 1.5 och två som kör senare versioner, med andra upplösningar.

    Innan du lägger ut en ny version bör du testa din app på de tre olika emulatorerna så att du vet att du stödjer allt du tror att du stödjer :)
     
  9. johannilsson

    johannilsson Adult Droid Medlem

    Blev medlem:
    23 jun 2009
    Inlägg:
    577
    Mottagna gillanden:
    8

    MINA ENHETER

    Det är inte så meckigt. Men du bygger för en nyare sdk version än vad du deployar för (fyra eller högre). Du gör detta genom att lägga till följande i ditt manifest samt kompilerar för den sdk'n du sätter i target.

    HTML:
    <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="7" />
    Det går fint att lägga drawables för mdpi under drawable-mdpi. Däremot buggar den ur ibland och väljer lite blandat från vilken drawable-* den ska plocka från. Du kan komma runt det genom att för hdpi och ldpi namnge dem som drawable-hdpi-v4 samt drawable-ldpi-v4 då ignoreras dessa för alla under version fyra.

    Det komplicerade kommer till om du i din kod under version tre vill veta om du köra under mdpi eller t.ex hdpi. Då får man ta till lite jobbigare metoder än att bara kalla på metrics.densityDpi. Skrev för ett tag sedan en helper för just det kanske kan vara till nytta; http://github.com/johannilsson/sthl...thlmtraveling/utils/DisplayMetricsHelper.java

    Annars är det bara att köra och njuta av att man inte alls behöver bry sig :)
     
  10. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 jun 2009
    Inlägg:
    1 768
    Mottagna gillanden:
    44

    MINA ENHETER

    O_o 1.5 hade väl bara support för en skärmupplösning?
     
  11. johannilsson

    johannilsson Adult Droid Medlem

    Blev medlem:
    23 jun 2009
    Inlägg:
    577
    Mottagna gillanden:
    8

    MINA ENHETER

    Det stämmer, mdpi. Men jag gissar att när man bygger för en nyare version så kickar någon bakåtkompabilitssak in som gör att det ändå fungerar att kasta sina bilder i korrekt dir.
     
  12. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 jun 2009
    Inlägg:
    1 768
    Mottagna gillanden:
    44

    MINA ENHETER

    Jag har nu kollat koden för snowstorm, och ja, jag har:

    res/drawable
    res/drawable-hdpi
    res/drawable-ldpi
     
  13. alioooop

    alioooop Adult Droid Medlem

    Blev medlem:
    16 jan 2010
    Inlägg:
    720
    Mottagna gillanden:
    11

    MINA ENHETER

    tack så hemskt mkt för all hjälp :) nu fattar jag hur jag ska göra :)