1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Graphisches Menü erstellen in Android..!

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von BFK, 31.12.2011.

  1. BFK, 31.12.2011 #1
    BFK

    BFK Threadstarter Erfahrener Benutzer

    Beiträge:
    160
    Erhaltene Danke:
    10
    Registriert seit:
    08.12.2010
    Hallo Forum,
    Versuche ein graphisches Menü zu erstellen, doch leider funktioniert es nicht so wie gedacht.
    Also ich habe ein Hintergrundsbild (Test.jpg) wo sich ein brauner Kreis befindet. Ich möchte, dass dieser Kreis ein button wird.
    Mein erster gedanke ist das ganze Bild als Hintergrundsbild in einem Layout zu setzten OHNE den braunen Kreis. Dann erstelle ich ein Bild nur mit dem brauen Kreis mit unsichtbarem Hintergrund, setze das ganze in einem ImageView und versuche somit dieses ImageView genau an der Stelle zu platzieren, wo es sein sollte. Und hier ist mein Problem, weiss nicht wie ich das so machen kann.
    Vor dem Button sollen sich noch weitere Views, wie z.B. SpinnerBox, TextViews usw befinden.


    Also zum Beispiel so..:
    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:orientation = "vertical"  
      android:background="@drawable/test">
    
     ...weitere Views
    
    <ImageView
        
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:src="@drawable/test_btn"
          ....
    />
    
    
    Wenn ich zum Beispiel beim ImageView Werte für "layout_marginLeft" und "layout_marginTop" setze (also die Position vom letzen View), funktioniert es zwar mit den richtigen Werten, aber nur mit der Auflösung des Hintergrundbildes (in diesem Fall ist es 320 x 480).
    Wenn ich es aber auf ner anderen Auflösung teste...grösser oder kleiner, dann ist das ImageView nicht an der richtigen Stelle.

    Was kann ich machen..?
    Ein anderes Layout wählen, aber welches..?
     

    Anhänge:

    • TEST.jpg
      TEST.jpg
      Dateigröße:
      17.6 KB
      Aufrufe:
      167
  2. snowman2, 01.01.2012 #2
    snowman2

    snowman2 Erfahrener Benutzer

    Beiträge:
    153
    Erhaltene Danke:
    18
    Registriert seit:
    07.12.2011
    Suchst du evtl. soetwas wie AbsoluteLayout?

    Was hast du denn für Werte gesetzt?
     
  3. BFK, 01.01.2012 #3
    BFK

    BFK Threadstarter Erfahrener Benutzer

    Beiträge:
    160
    Erhaltene Danke:
    10
    Registriert seit:
    08.12.2010
    Hi snowman2,
    ja so etwas ähnliches suche ich.
    Aber das AbsoluteLayout kann ich ja nicht verwendet, wurde ja von Android selbst abgelehnt.

    Die genaueren Werten zu sagen würde nichts ändern, habe mir halt angeguckt wie weit das ImageView vom richtigen Platz entfernt ist und experementiel Werte ausprobiert.
    Die Werte sind eh in "dp" und zum Beispiel ist ja layout_marginTop der Abstand zwischen dem ImageView und dem letztem View im LinearLayout.
    Zum Beispiel hatte ich bei layout_marginTop den Wert 320dp benutzt und wie schon gesagt bei gleicher Auflösung funkt es ohne Probleme, das ImageView wird an der richtigen Stelle platziert, aber sobalb ich ne höhere Auflösung benutze wird das ImageView mind. 100 pixel oberhalb der richtigen Stelle platziert. irgendwie funktioniert die dp-Methode mit Bildern nicht so richtig. (Ganz anders ist es bei den Views, da funktienert dp perfekt, wird wirklich gut umgesetzt und angepasst)

    Mir ist auch ein rätsel wieso ich im inet zu wenig Infos über sowas finde.
    Will keiner ein grafisches Menü erstellen..?
    ... die meisten Menüs sind viel zu simple erstellt und da braucht man sich nicht allzuviele Sorgen zu machen...!
     
  4. mradlmaier, 01.01.2012 #4
    mradlmaier

    mradlmaier Gewerbliches Mitglied

    Beiträge:
    158
    Erhaltene Danke:
    17
    Registriert seit:
    28.10.2011
    Framelayout?
    Damit kannst Du Views übereinander stapeln...und dann mit den üblichen Attributen positionieren z.b übereinander zentrieren.
     
  5. BFK, 03.01.2012 #5
    BFK

    BFK Threadstarter Erfahrener Benutzer

    Beiträge:
    160
    Erhaltene Danke:
    10
    Registriert seit:
    08.12.2010
    Hallo weider mal,
    FrameLayout bringts leider au nicht (weil ein frameLayout ja die Position vom Anfang des Layouts berechnet, aber wenn ich die Auflöung wieder ändere funktioniert es da nicht mehr) und wie es ausieht gibt es keine "feine" Lösung für dieses Problem, da eine Android-App auf verschiedene Bildschirmauflösung funktioniert und man weiss auch nicht so richtig wie Android jetzt das Bild skaliert, also wie genau.

    Die einzige Lösung die ich bis jetzt gefunden habe ist einfach mehrere layout-ordner ertstellen (mdpi,hdpi,ldpi) und in jedem dieser Ordner ne verschiedene xml erstellen, egal was fürn Layout man benutzt, man ändert ja nur die dp-Werte.
    Zusätlich sollte man in onCreate abfragen was fürne Auflösung das handy benutzt und so noch einige Feinabstimmung vornehmen.
    Zum Beispiel greift ein Handy mit ner Auflösung von 854x480 die Drawables vom "drawable-hdpi"-Ordner. Ein Handy mit ner Auflösung von 800x480 sucht im selben Ordner nach den passenden Drawables. Also könnte man das ImageView perfekt platzieren wenn man die Auflöung kennt.

    Code:
    private void place_ImageButton_differentScreenResolution()
        {
            LinearLayout lin = (LinearLayout) findViewById(R.id._lin);
            
            Display display = getWindowManager().getDefaultDisplay(); 
            int screenWidth = display.getWidth(); 
            int screenHeight = display.getHeight();
            
            if(screenHeight == 854 && screenWidth == 480)
            {
                ImageTextView imv = (ImageTextView) findViewById(R.id._button);
                LinearLayout.LayoutParams par = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
                par.setMargins(12, 122, 0, 0);
                lin.removeView(imv);
                lin.addView(imv, par); 
            }
            else if(screenHeight == 960 && screenWidth == 540){
                ...
            }
    
        } 
    
    Einziger und leider auch GROSSER nachteil..:
    Es ist viel zu viel aufwendig, damit das Design der App bei allen Handys perfekt aussieht.
    Man muss alle folgende Auflösungen miteinbeziehen..:

    240x320
    320x480
    480x800
    480x854
    540x960
    720x1280

    und man weiss ja nie ob es später ne Auflösung geben wird die oben nicht in der Liste steht.

    Wenn jemand eine bessere Lösung gefunden hat, wäre nett wenn er die mal posten würde, aber leider denke ich, dass es keine bessere Lösung gibt.

    -MFG BFK-
     

Diese Seite empfehlen