Hjälp med (home screen) widgetstorlekar

Diskussion i 'Frågor, support och diskussion' startad av Kaj, 17 jan 2011.

  1. Kaj

    Kaj Senior Droid Medlem

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

    MINA ENHETER

    Tjenare,

    Har nu börjat skriva lite på delen som skall göra det möjligt att helt styra hur widgets ritas. När jag gjorde Snowstorm 2.x och det började komma telefoner och teman som var högupplösta upptäckte jag ett antal problem. Det går t.ex inte att från en app widget "publicera" mycket data till OS:et.
    Om jag t.ex försökte göra en högupplöst 4x2 widget så small det pga att bakgrundsbilden + alla väderikoner blev för mycket grafik. Det går att lösa genom att istället generera en bild som är en färdigritad layout. Fördelen med det är att man då även kan komma runt en massa andra begränsningar, som att t.ex kunna låta användare välja transparency på bakgrunden, och att låta användare välja att ha en outline på text m.m.

    Den stora nackdelen är att om man genererar en bild, och den har fel storlek, kommer inte texten i bilden att vara skarp iom att OS:et då skalar den pixelerade bilden och texten. Därför behöver jag er hjälp med att få reda på hur illa det är vad det gäller widgetstorlekar på olika telefoner, och med olika versioner samt upplösningar. T.ex har widgetstorleken i pixlar räknat ändrats i vanilla Android mellan 2.2.1 samt 2.3. Home screen replacements gör det hela ännu värre.

    Jag har skrivit ett testprogram, och skulle vilja att folk med olika telefoner kör programmet och mailar mig resultatet när de testat sig fram till vilken storlek en widget har på en särskild telefonmodell och Androidversion. Skriv även om ni använder en home screen replacement.

    Beskrivning av programmet. Installera measurewidget.apk från:
    http://andbin.com/_media/measurewidget/measurewidget.apk

    [​IMG]

    Välj sedan att lägga till en 4x2 widget eller 1x1 measurewidget på din hemskärm. Det kommer då visas en väldigt ful widget med röd bakgrund, och ett svart område. Meningen är att det svarta området skall täcka det röda området så mycket som möjligt. Man ändrar det svarta områdets storlek genom att klicka på det svarta området, och i aktiviteten som dyker upp ändra höjd/bredd.
    Det är enklast att först ändra bredd så att den stämmer. Sedan ändrar man höjd, om höjden blir för hög så kommer det dyka upp ett rött område till höger, och då måste man ändra höjden till ett mindre värde. Ofta kan man inte få det svarta området att täcka hela det röda området.

    När det svarta området täcker det röda, eller nästan hela det röda så kan man maila rapporten till mig.
    Man kan även posta ett svar här med info så att andra kan se.

    Screenshot av hur 2.2.1 ser ut i emulatorn:
    [​IMG]

    Exempel på hur resultatet blir när man mailar (från aktiviteten):

    apiVersion=8
    buildRelease=2.2.1
    buildDisplay=FRG83D
    buildModel=Nexus One
    buildProduct=passion
    density=1.5
    scaledDensity=1.5
    width=480
    height=800

    Widget: se.f1nally.measure.widgets.Widget4x2
    WidgetConfig:
    height=482
    width=720

    Ja, resultatet är fult men jag skall bara använda det för att se om det på något sätt går att beräkna widgetstorlek utifrån data i telefonen. I Snowstorm kommer jag ev även låta användare själva kunna välja storlek i pixlar.

    Det jag vet än så länge är att jag troligen måste skapa en lista över api-version, density samt upplösning där jag kan slå upp ungefärlig storlek på widget.

    Edit: Resultatet för 1x1 på Nexus med vanilla 2.2.1:

    apiVersion=8
    buildRelease=2.2.1
    buildDisplay=FRG83D
    buildModel=Nexus One
    buildProduct=passion
    density=1.5
    scaledDensity=1.5
    width=480
    height=800

    Widget: se.f1nally.measure.widgets.Widget1x1
    WidgetConfig:
    height=224
    width=180
     
    Last edited: 17 jan 2011
  2. Kaj

    Kaj Senior Droid Medlem

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

    MINA ENHETER

    Denna post kommer jag editera vartefter jag får fram data:

    Kod:
    Model		OS		Api	Density		4x2		1x1
    Nexus One	2.2.1		8	1.5		720x482		180x225
    Nexus One	2.2.2		8	1.5		720x489		180x225 (Launcher Pro Plus)
    Nexus S		2.3.2		9	1.5		720x420		180x225 (go launcher)
    Nexus S		2.3.2		9	1.5		720x466		180x225
    Desire HD	2.2.1		8	1.5		480x326		120x150
    HTC Desire	2.2		8	1.5		480x326		120x150
    HTC Wildfire	2.2.1		8	0.75		240x128		120x126
    HTC Magic	2.2.1		8	1.0		320x200		148x183	(Adw launcher)
    HTC Vision	2.2.1		8	1.5		480x326		120x150
    HTC Legend	2.2		8	1.0		320x200		148x184
    X10i		2.1-update1	7	1.5		720x440		180x220
    U20i		2.1-update1	7	0.75		176x112		45x55
    ZTE-BLADE	2.2		8	1.5		720x313		180x225 (Launcher pro plus)
    GT-I5700	2.2.1		8	1		320x200		80x100
    

    Något verkar vara mysko med mätningen på Wildfire
     
    Last edited: 27 jan 2011
  3. sandos

    sandos Adult Droid Medlem

    Blev medlem:
    27 maj 2009
    Inlägg:
    715
    Mottagna gillanden:
    8

    MINA ENHETER

    Du planerar inte att kolla storlekar för landscape? Inte så vanligt kanske men det existerar ju också, kanske framförallt på plattor.
     
  4. Kaj

    Kaj Senior Droid Medlem

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

    MINA ENHETER

    Min förhoppning var att de skulle kunna gå att beräkna utifrån portrait, men det kanske är helt fel?
     
  5. sandos

    sandos Adult Droid Medlem

    Blev medlem:
    27 maj 2009
    Inlägg:
    715
    Mottagna gillanden:
    8

    MINA ENHETER

    Det vet jag faktiskt inte. Testar din widget i landscape men den vill inte fungera så bra verkar det som. Blir vitt+rött, inget svart. :)

    Ah, fick 424x147 på 4x2 i landscape. Och 1x1 = 158x108
     
    Last edited: 18 jan 2011
  6. Kaj

    Kaj Senior Droid Medlem

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

    MINA ENHETER

    Allt som inte är rött är svart :)

    (Troligtvis var det vita en del av editfältet som jag rendrerar)
     
  7. Kaj

    Kaj Senior Droid Medlem

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

    MINA ENHETER

    Uppdaterade post #2 med ytterligare en telefon.
     
  8. asperon

    asperon Adult Droid Medlem

    Blev medlem:
    6 aug 2009
    Inlägg:
    587
    Mottagna gillanden:
    94
    Operatör:
    Tele2
    Telefon:
    Pixel 6

    MINA ENHETER

    Operatör:
    Tele2
    Telefon:
    Pixel 6
    Mycket intressant, säg till om du behöver mera hjälp, då detta är något jag skulle behöva undersöka för Smooth Calendar med. Vi kanske skulle fixa ett gemensamt framework som bas för att rita widgets på det här sättet?
     
  9. Kaj

    Kaj Senior Droid Medlem

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

    MINA ENHETER

    Det kan vi göra, och jag funderade på att göra delar av det generella. Dock lite osäker på vad som skall in i det ramverket iom att det blir väldigt lite kod för att rita.

    I Snowy (arbetsnamnet för nästa Snowstorm) gör jag inflate på en layout, sätter allt data jag vill, och sedan låter jag layouten rita sig i en Bitmap. Iof behövde jag sedan även trycka ned bilden på fil, och resolva den via en ContentResolver.

    Hm, widgetkoden jag nu gjort är troligen också rätt generell.

    Har du förslag på vad vi skall göra?
     
  10. asperon

    asperon Adult Droid Medlem

    Blev medlem:
    6 aug 2009
    Inlägg:
    587
    Mottagna gillanden:
    94
    Operatör:
    Tele2
    Telefon:
    Pixel 6

    MINA ENHETER

    Operatör:
    Tele2
    Telefon:
    Pixel 6
    Jag har tänkt att använda en egen xml layout för skinnen/layouten, denna tänker jag sedan parsa och rita en bild i rätt storlek, för att sedan sätta den i en widgetlayput som enbart består av en bild. Ett första steg är väl att bygga en metod baserat på det data du samlat ihop som talar om hur stor en bild skall vara givet x, y samt orientation. Vill vi så kunde vi ju använda samma xml layout, om vi kan göra den generell nog för att fungera med båda apparna.
     
  11. Kaj

    Kaj Senior Droid Medlem

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

    MINA ENHETER

    Låter som att vi vill göra precis samma sak, och kan ha gemensam layoutfil (min har också bara en bild och inget annat).
     
  12. asperon

    asperon Adult Droid Medlem

    Blev medlem:
    6 aug 2009
    Inlägg:
    587
    Mottagna gillanden:
    94
    Operatör:
    Tele2
    Telefon:
    Pixel 6

    MINA ENHETER

    Operatör:
    Tele2
    Telefon:
    Pixel 6
    Gött, jag har tänkt mig ha stöd för att rita text på bilder som en del av layouten (dvs, men än på en ev bakgrund), men vi skulle väl kunna börja bolla lite kod så ser vi vart vi landar. Hoppas få lite tid i helgen så kan jag börja leka lite med det.
     
  13. Kaj

    Kaj Senior Droid Medlem

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

    MINA ENHETER

    Behöver du rita text?

    Layouten som jag inflatar, och gör en bild av är en helt vanlig layout med TextView, ImageView i osv. Sätter bara texten i min TextView och renderar sedan vyn till en bild.

    Den rendrerade bilden hamnar sedan i min root view som bara har en ImageView.
     
  14. asperon

    asperon Adult Droid Medlem

    Blev medlem:
    6 aug 2009
    Inlägg:
    587
    Mottagna gillanden:
    94
    Operatör:
    Tele2
    Telefon:
    Pixel 6

    MINA ENHETER

    Operatör:
    Tele2
    Telefon:
    Pixel 6
    Grejen är att jag vill göra en massa saker i layouten som Android inte klarar av, samt låta användaren dynamisk bestämma vilka objekt som renderas vart osv. Så jag tror att ett eget xml format och en parser som ritar den bilden med ett givet dataset samt som i sin tur sätts i imageviewn är ett måste.
     
  15. Kaj

    Kaj Senior Droid Medlem

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

    MINA ENHETER

    Ok. Skulle du kunna ge ett exempel på vad det är som du inte får stöd för i en vanlig layout?

    I Snowy tänker jag ha alternativa layouter som användare kan välja mellan, men alla mina layouter kommer vara vanliga layouter där användare endast kan styra sådant som alpha, custom bakgrunder, drop shadows osv.

    Du kan inte skriva custom vyer för det som du behöver?
     
  16. asperon

    asperon Adult Droid Medlem

    Blev medlem:
    6 aug 2009
    Inlägg:
    587
    Mottagna gillanden:
    94
    Operatör:
    Tele2
    Telefon:
    Pixel 6

    MINA ENHETER

    Operatör:
    Tele2
    Telefon:
    Pixel 6
    Det är möjligt, får kika lite på det. Men vi kan ju börja med att sätta ihop en klass för att räkna ut storlekar osv, det kommer ju i vilket fall vara gemensamt.