Schieber einer SeekBar verschieben - setProgress reicht nicht

  • Hi


    Ich möchte beim "Klicken" auf einen Button eine SeekBar auf einen definierten Wert setzen.


    Java
    public void onClick(View v)
        {
    		if(v != this.GUI_fixpos) return;
    		
    		this.GUI_volume.setProgress(this.SavedVolume);
    	}


    Allerdings bekomme ich dann folgendes Resultat:


    Der gelbe Balken ist an der richtigen Position, allerdings wird der Schieber auf 0 gesetzt.
    Wie kann ich das Problem beheben? Im Internet wird immer nur von setProgress gesprochen, aber das reicht offensichtlich nicht :)


    Die Konfiguration der SeekBar:

  • Ich hab das mal nachgebaut - mit einem einfachen SeekBar (horizontal, Standard-Thumb) hab ich da kein Problem, der sitzt an der richtigen Stelle.


    Vielleicht machst du dir noch mal eine SeekBar zum spielen in dein Layout und fängst erst mal horizontal mit festen Werten an und erweiterst und änderst dann alles weitere...

  • Hm… merkwürdig


    Ich habe folgendes, einfaches Testprojekt angelegt:



    Sowohl die Horizontale als auch die Vertikale SeekBar verhalten sich wie erwartet. Der Fehler tritt nicht auf.
    Dann wollte ich einfach mal den SeekBars die gleichen Einstellungen geben wie im obigen, fehlerhaften, Code. Allerdings hat in diesem Testprogramm die Klasse LayoutParams kein weight-Attribut ?(
    Warum? Es ist doch in beiden Fällen die selbe Klasse…

  • Das wundert mich, dass der layout_weight-Parameter stört - vielleicht solltest du den besser dem umgebenden Element verpassen und hier für die Höhe einfach FILL_PARENT nutzen...


    Anderer Vorschlag: du hast in deinem ersten Quelltext die Breite nachträglich gesetzt - du kannst das doch auch gleich beim new mitmachen:


    Java
    LayoutParams seekbarlayout = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1.0f);


    Info für die Java-Neulinge: (float) 1.0 == 1.0f

  • FILL_PARENT geht im ersten Code nicht, weil die Vertikale SeekBar dann einen Button darunter überdeckt. (wurde in diesem Thread thematisiert :))


    Das Problem ist auch weiterhin, dass die LayoutParams-Klasse in meinem Testprogramm weder das weight-Attribut noch den entsprechenden Constructor anbietet.
    Wie kann das sein? Beide Projekte nutzen die selbe Java und Android-API (2.3.3) Version.


    Das weight-Attribut ist jedenfalls jetzt der vermutlich einzige unterschied, wobei ich der LayoutParams-Klasse auch nicht wirklich traue. Es scheint ja offensichtlich eine andersartige Klasse zu sein…

  • Du kannst deine SeekBar gerne in ein eigenes LinearLayout (o.ä.) für das weight einpacken, dann kannst du besser mit den Breiten/Höhen spielen und die Elemente darunter werden nicht abgedeckt. Außerdem kannst du dann noch etwas daneben packen...


    Die LayoutParams mag ich auch nicht so gerne, ich packe die Einstellungen lieber in die XML-Layouts rein oder mach mir einen Style dafür (wenn öfter vorkommt).

  • Ich habe jetzt noch ein wenig mit den Layouts herumgespielt und auch an der Testapp noch etwas geändert.
    Solange ich setProgress vor dem Zusammenbau des GUIs anwende funktioniert es in beiden fällen so wie es soll. Wende ich setProgress zur Laufzeit, wenn ich z.B. auf einen Button klicke, wird die original SeekBar korrekt gesetzt, die Vertikale nicht.


    m( Während ich diese Antwort schrieb habe ich die Lösung gefunden.
    Den Code für die vertikale SeekBar habe ich auf stackoverflow gefunden. Weiter unten wird eine Lösung für mein Problem beschrieben :-[


    Trotzdem Danke für die Hilfe.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!