German Frage zu DesignerScript und Positionierung im Code

mw71

Active Member
Licensed User
Hallo,

ich habe mich, als ich mit der App begonnen habe, entschieden das ganze mit Panels zu machen (funktioniert ganz gut).
Diese Panels habe ich im Designer erstellt. An einigen Stellen habe ich das dann im Code "dynamisiert". Dabei habe ich ein (kleines) Problem und eine Frage. Das Setup Panel zeigt z.B. das Label lbl_Phat nicht an. Erst wenn etwas drin steht wird es eingeblendet. Entsprechend wird die Position der Elemete durch den Code angepasst. Leider funktioniert das nicht auf allen Gräten optimal.
Hier der Verwendete Code:
B4X:
sub mv_fields    
If lbl_Phat.Text <>"" Then
                            lbl_Phat.Visible =True
                            lbl_Speicher.Top=lbl_Phat.Top+ lbl_Phat.Height + 10dip
                            SpinnerSaveMode.Top=lbl_Phat.Top+ lbl_Phat.Height + 10dip
    Else
                            lbl_Phat.Visible =False
                            lbl_Speicher.Top=btn_PhatSel.Top+btn_PhatSel.Height +10dip
                            SpinnerSaveMode.Top=btn_PhatSel.Top+btn_PhatSel.Height +10dip
    End If
   
    If lbl_DateiName.Visible =True Then
                                         lbl_Trenn_1.Top=lbl_DateiName.Top+lbl_DateiName.Height '+5dip
    Else
                                         lbl_Trenn_1.Top=lbl_Speicher.Top+lbl_Speicher.Height' +5dip
    End If
   
    btn_PhatListen.Top=lbl_Trenn_1.top + 30dip
    lbl_PhatListen.Top=lbl_Trenn_1.top + 90dip   
   
    If lbl_PhatListen.Text <>"" Then
                                    lbl_PhatListen.Visible=True
                                    btn_Reset_List.Visible =True
                                    btn_Reset_List.Top=lbl_PhatListen.top + 100dip
                                    lbl_Trenn_2.Top= btn_Reset_List.top + 40dip
    Else
                                    lbl_PhatListen.Visible=False
                                    btn_Reset_List.Visible =False
                                    lbl_Trenn_2.Top=btn_PhatListen.Top +btn_PhatListen.Height +10dip
    End If
   
    lbl_licht.top=lbl_Trenn_2.Top + 30dip: ToggleButton1.top =lbl_Trenn_2.top + 30dip
    lbl_Trenn_3.top =lbl_Trenn_2.top + 80dip
    lbl_Trenn_4.top =lbl_Trenn_3.top + lbl_ADIF_City.Height + 20dip
    btn_Baender.Top = lbl_Trenn_4.Top + lbl_Trenn_4.Height + 5dip
    lbl_Trenn_5.top =btn_Baender.Top+btn_Baender.Height+5dip
    lbl_DateFormat.Top=lbl_Trenn_5.Top + lbl_Trenn_5.Height + 5dip
    SpinnerDateFormat.Top=lbl_DateFormat.top
    lbl_Trenn_6.top =lbl_DateFormat.Top+lbl_DateFormat.Height+5dip
    btn_own_Call.Top=lbl_Trenn_6.top + 30dip
    lbl_own_Call.Top=lbl_Trenn_6.Top + 30dip   
    lbl_Trenn_7.top =btn_own_Call.Top+btn_own_Call.Height+5dip
    btn_SetUp3.Top=lbl_Trenn_7.Top+lbl_Trenn_7.Height
    lbl_Trenn_8.Top=btn_SetUp3.top+btn_SetUp3.height
    btn_Backup_einrichten.Top=lbl_Trenn_8.Top+lbl_Trenn_8.Height
    lbl_Trenn_9.Top=btn_Backup_einrichten.Top + btn_Backup_einrichten.Height
    btn_Reset_GMAup.Top=lbl_Trenn_9.Top+lbl_Trenn_9.Height
    lbl_Trenn_10.Top=btn_Reset_GMAup.Top + btn_Reset_GMAup.Height
    btn_Reset_GDrive.Top=lbl_Trenn_10.Top+lbl_Trenn_10.Height
    lbl_Trenn_11.Top=btn_Reset_GDrive.Top+btn_Reset_GDrive.Height
   
    spn_adif_exp.Top =lbl_Trenn_2.Top + 110dip : lbl_ADIF_City.Top=spn_adif_exp.Top
   
    btn_Reset.Top        =lbl_Trenn_11.Top + 40dip
    btn_SetUp_Cancel.Top =lbl_Trenn_11.Top + 40dip
    btn_Save_SetUp.Top   =lbl_Trenn_11.Top + 40dip
   
    SV.Panel.Height = btn_Save_SetUp.Top + btn_Save_SetUp.Height +50dip
End Sub
Das zugehörige File habe ich abgehangen. Dieses wird in ein ScrollView geladen.
Bei meinem Betatester auf dem Tablet klappt die Positionierung nicht ganz (Elemente überdecken sich z.T.). Ich vermute das es an den dpi Angaben liegt, bin mir aber nicht sicher und habe keine Idee wie ich das besser machen kann.


Zum anderen habe ich noch eine Frage bzgl. des Designer Script's.
Im Moment passe ich einige Sachen im Code (in der Main Activity) an. Macht es Sinn dieses eher im Designer Script zu machen? Wenn ich das richtig gelesen habe ist das vom (Programm)Ablauf her egal, da ich die Panels auch in der Main Activity lade und danach anpasse. Wenn ich das in den Designer Script verschiebe würde sich ja nur der Code in der Main Activity "lichten", oder habe ich da noch was falsch verstanden?

Grüße
 

Attachments

  • setup.bal
    21.5 KB · Views: 142

An Schi

Well-Known Member
Licensed User
Hab deinen code nicht angeschaut, aber um Überdeckungen zu vermeiden, arbeite ich mit Prozentangaben.
Z.B.:
label1.width = 50%x
label2.left = 51%x
label2.width = 20%x
usw...
 

klaus

Expert
Licensed User
Es ist schwer genau zu sagen wo genau das Problem liegt, ohne das Programm testen zu können.
Ich vermute folgende Probleme:
1. Du hast zwei Layout Varianten, warum?
2. Du benutzt AutoScaleAll im Designer, das heisst dass die Views je nach Gerätegrösse verändert werden. Das könnte der Ursprung der Überlappung sein.
3. In diesen beiden Zeilen:
btn_PhatListen.Top=lbl_Trenn_1.top + 30dip
lbl_PhatListen.Top=lbl_Trenn_1.top + 90dip

Ist 90dip 30dip (Höhe von lbl_Trenn_1) + 60dip (Höhe von btn_PhatListen) ?
Die Höhe verändert sich mit AutoScale, also sind es keine 30 und 60dip mehr.
Du solltest überall mit der Höhe der Views arbeiten.
btn_PhatListen.Top = lbl_Trenn_1.top + lbl_Trenn_1.Height
lbl_PhatListen.Top = btn_PhatListen.Top + btn_PhatListen.Height

Ich würde vorschlagen, Alles was möglich ist mit DesignerScripts zu machen, auch mit Anchors.

Das dynamische Ausblenden und Verschieben muss im Code gemacht werden.das ist mit DesignerScripts unmöglich.
 

mw71

Active Member
Licensed User
1. Du hast zwei Layout Varianten, warum?
gute Frage, das war mir gar nicht mehr bewusst das ich dies angelegt habe und wieso.
Ich werde es mal entfernen, sollte nicht nötig sein.

2. Du benutzt AutoScaleAll im Designer, das heisst dass die Views je nach Gerätegrösse verändert werden. Das könnte der Ursprung der Überlappung sein.

Ja, das steht meines Wissens ja standardmäßig drin, ich muss mir das Verhalten mal anschauen wenn ich das entferne.

3. In diesen beiden Zeilen:
btn_PhatListen.Top=lbl_Trenn_1.top + 30dip
lbl_PhatListen.Top=lbl_Trenn_1.top + 90dip

Ist 90dip 30dip (Höhe von lbl_Trenn_1) + 60dip (Höhe von btn_PhatListen) ?
Die Höhe verändert sich mit AutoScale, also sind es keine 30 und 60dip mehr.
Du solltest überall mit der Höhe der Views arbeiten.
btn_PhatListen.Top = lbl_Trenn_1.top + lbl_Trenn_1.Height
lbl_PhatListen.Top = btn_PhatListen.Top + btn_PhatListen.Height

:rolleyes: ich glaube ich hab gerade Tomaten oder ähnliches auf den Augen. Normalerweise mache ich das genau so zzgl. eines gewissen Offsets (5-15 dpi).
Das werde ich mal als erstes ändern, evtl. reicht das schon.

Danke!!
 
Top