Laden...

Xamarin Android - Text von Eingabe auf gleicher Ebene mit dem Label

Erstellt von trib vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.913 Views
T
trib Themenstarter:in
708 Beiträge seit 2008
vor 4 Jahren
Xamarin Android - Text von Eingabe auf gleicher Ebene mit dem Label

Hallo zusammen,

ich versuche ein Label und ein Entry nebeneinander darzustellen.
Das Problem ist aber, dass der Text nicht auf der selben Höhe ist und es deshalb ziemlich bescheiden aussieht.

Beim Label kann ich mit dem VerticalTextAlignment zwar zwischen Start, Center & End unterscheiden, aber nichts davon befindet sich auf Höhe des Entry-Textes.
Bei dem Entry selbst gibt es kein Property um das Alignment des Textes zu definieren.
Natürlich kann man nun mit einem Custom Renderer das Entry individualisieren. Aber das kann doch nicht Sinn und Zweck sein, oder?

Unter UWP ist das Entry umrahmt. Da ist der Text zwar ebenfalls nicht auf der Höhe, jedoch fällt es nicht mehr ganz so ins Auge, da das Label wenigstens zentriert zur Textbox ist.

Die Controls liegen beide auf einem StackLayout mit horizontaler Orientierung. Beide haben die identische Höhe und die VerticalOptions stehen auf StartAndExpand.

U
69 Beiträge seit 2019
vor 4 Jahren

Versuche mal die VerticalOptions bei beiden Controls auf Center zu setzen.
Bei mir ist dann der Text auf gleicher Höhe.

“Knowledge cannot replace friendship. I'd rather be an idiot than lose you.”

  • Patrick to Spongebob
T
trib Themenstarter:in
708 Beiträge seit 2008
vor 4 Jahren

Hmm, das ist seltsam. Bei mir nicht!

Beides auf Center und der Label-Text ist am oberen Rand orientiert. Also etwas höher als "STÜCK".
Setze ich beim Label nun VerticalTextAlignment = TextAlignment.Center kommt es zu dem Verhalten auf meinem Screenshot.

Schnell mal eine Test-View mit einem Grid zusammengeschustert und es sieht gut aus!
Also muss es wohl an meinem Stacklayout liegen. Dort alle Eigenschaften außer Horizontal und LeftToRight auskommentiert. Immer noch das selbe 😕
Werde mich morgen nochmal von null an vorankämpfen. Muss ja irgendwo dran liegen!

U
69 Beiträge seit 2019
vor 4 Jahren

Hi,

ich habe mal auf einer ContentPage als einzigen Inhalt ein StackLayout mit einem Label und einem Entry eingefügt.

    <StackLayout Orientation="Horizontal">
        <Label FontSize="Medium" Text="{x:Static resources:Languages.View_Username}" VerticalOptions="Center" />
        <Entry IsEnabled="{Binding IsDemoMode, Converter={x:StaticResource InverseBoolConverter}}" WidthRequest="200" Text="{Binding Username}" VerticalOptions="Center" />
    </StackLayout>

Das Ergebnis sieht bei mir aus wie erwartet/gewünscht...

“Knowledge cannot replace friendship. I'd rather be an idiot than lose you.”

  • Patrick to Spongebob
T
trib Themenstarter:in
708 Beiträge seit 2008
vor 4 Jahren

Hallo zusammen,

ich habe nun endlich mein "Problem" ausfindig gemacht!
Meine Controls füge ich per Code hinzu. Mache ich es wie Urza (Danke dafür!) im XAML, klappt es natürlich.

Also freudig alles auskommentiert, was keine Miete zahlt und Label + Entry sind nach wie vor nicht auf einer Y-Achse...

Nun habe ich die entscheidende Stelle endlich gefunden:
Es lag am HeightRequest!

Da ich meine Canvas pixelgenau in einem anderen Tool generiere, füge ich alle Controls untereinander ein und setze den Heigth- & Width-Request + ein Margin für den Abstand.
Bei Controls auf der selben Y-Achse verwende ich ein zusätzliches StackLayout.

Nun setze ich den HeightRequest im StackLayout und das Label nur auf "Center". Klappt solang ich keine Hintergrundfarbe setze. Dann fällt nämlich auf, dass das Edit-Control die volle Höhe einnimmt und das Label nur die des anzuzeigenden Textes.

Lange Rede kurzer Sinn: Ist das Label zentriert und die Höhe errechnet sich selbst, funktioniert es.
Übergibt man eine gewünschte Höhe oder stretcht diese, funktioniert es nicht mehr.