Verständnisproblem an einem einfachen Design Beispiel

  • Antworten:10
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 26

30.03.2018, 22:14:53 via Website

Hallo zusammen

ich habe ein in einem Relative Layout das Textfeld ID B an das Textfeld ID A gekoppelt.


xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.vjd.pacificapps.examplerelativlayout.MainActivity">

<TextView
    android:id="@+id/a"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:background="@android:color/darker_gray"
    android:gravity="bottom"
    android:text="ID A"
    android:textColor="#ffffff" />

<TextView
    android:id="@+id/b"
    android:layout_centerInParent="**@id/a**"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:gravity="center"
    android:background="@android:color/black"
    android:textColor="#ffffff"
    android:text="Id B"/>

Das sieht dann wie erwarte so aus
image

Jetzt ändere ich für Textview android:id="@+id/a" die die Position bei xxx_center auf false
android:layout_centerHorizontal="false"
android:layout_centerVertical="false"

und erwarte eigentlich das das Textview "@+id/b mitgezogen wird, weil es ist ja an @+id/a gekoppelt.

wird es aber aus irgendeinem Grund nicht.
Die Textfelder sind wie im folgendem Bild getrennt.

image
Frage: Was muss ich tun damit Id B Textfeld automatisch mitgezogen wird?

Danke für das darüberschauen
schöne Ostertage
Gruss Volker

PS: nächstes mal verkleinere ich meine eingestellten Bilder. Muss jetzt weg. Die Frau ruft schon.

Diskutiere mit!
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.182

31.03.2018, 10:26:12 via Website

Hallo Volker,

wenn man sich überlegt, was diese Attribute tun:

 android:layout_centerHorizontal="true"
android:layout_centerVertical="true"

isr klar, dass sich das Element in er Mitte des gesamten Layouts ausrichtet, egal wo es angeheftet ist.
Von dem her müssen diese Attribute weg.

Ich hätte das ungefähr so gemacht:

   <TextView
        android:id="@+id/b"
        android:layout_centerInParent="@id/a"
        android:layout_marginTop="25dp"
        android:layout_marginLeft="25dp"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:gravity="center"
        android:background="@android:color/black"
        android:textColor="#ffffff"
        android:text="Id B"/>

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 26

01.04.2018, 03:06:57 via Website

Hallo Pascal

Wie ich es auf die neue Art darstellen kann war mir schon klar.
Meine Wunsch lag eher darin, dass es automatisch mitgezogen wird wenn ich "@+id/a" woanders hinziehe.
Irgendwo gibt es was, wo ich meine Sachen mitgezogen bekommen.
Wahrscheinlich muss ich dafür aber ein anderes Layout wählen.

Generell gesagt: Mir erschließt sich jetzt nicht der Sinn des Statements android:layout_centerInParent="@id/a" im inneren Fenster.
Ob ich das nun angebe oder nicht ändert nichts an der Position des Elements. (thinking)

Gruss Volker

Hilfreich?
Diskutiere mit!
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.182

01.04.2018, 09:46:57 via Website

ja wenn du das ganze als Block verschieben willst, ist es einfach man schachtelt die Layouts und schiebt das innere RelativeLayout durch die gegend, das funktioniert:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.vjd.pacificapps.examplerelativlayout.MainActivity">
<RelativeLayout
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:id="@+id/relLayout">
    <TextView
        android:id="@+id/a"
       android:layout_centerInParent="true"
        android:background="@android:color/darker_gray"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="bottom"
        android:text="ID A"
        android:textColor="#ffffff" />

    <TextView
        android:id="@+id/b"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:gravity="center"
        android:background="@android:color/black"
        android:textColor="#ffffff"
        android:text="Id B"/>
</RelativeLayout>

</RelativeLayout>

Jetzt kannst du das Layout mit @id/relLayout mit Margins etc. frei durch die gegend schieben und der Block aus TextViews bleibt immer gleich.

— geändert am 01.04.2018, 09:47:33

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 26

01.04.2018, 19:10:50 via Website

Stimmt wenn das komplette Layout verschoben wird ist das so.
Ich glaube, ich hatte in irgendeinem Video noch etwas eine andere Möglichkeit gesehen.
Da recherchiere ich noch mal.

Was jetzt für mich jetzt gar keinen Sinn mehr ergibt war
der Link über das Statements android:layout_centerInParent="@id/a"
Was soll das dem Entwickler bringen?

Gruss Volker

Hilfreich?
Diskutiere mit!
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.182

01.04.2018, 19:17:47 via Website

So wie du es nutzen wolltest garnichts, denn schau in der Doku:

https://developer.android.com/reference/android/widget/RelativeLayout.LayoutParams.html#attr_android:layout_centerInParent

das kann nur den Wert true oder false annehmen aber keine ID, daher tut das nicht.
Und wenns True ist, dann wird das element "centered" im aktuellen Parent Layout ausgerichtet.
Verknüpfung von Elementen direkt geht nur mit layout_below oder layout_above und da nicht ineinander außer du vergibst negative margins dem inneren Element.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 26

02.04.2018, 05:27:10 via Website

Danke für den Hinweis.
ich sehe gerade ich habe mich da verrannt.
Typisch Anfängerfehler.
Morgen schaue ich mal nach was ich eigentlich wollte.
Gruss Volker

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 26

04.04.2018, 06:32:53 via Website

Naja Pascal

Vielen Dank für deine Mühen.
Ich habe noch mal ca 12 Stunden mit den verschiedenen Layouts darum gespielt und auch Verschachtelungen von Layouts genutzt.
Einfach mal so generell: Soweit ist das mit ADK ganz OK, aber dieses komische GUI hasse ich. Die vermasselt mir die Laune!
Egal ob AWT, Swing oder das Geraffel unter Android alles das Gleiche.
Vor ca 18 Jahren hatte ich mal 2 Stunden in einen Javakurs reingeschaut.
Da gab es irgendwelche logischen Erklärungen warum das so mit den Layouts ist.
Für mich ist das unlogisch. Sowas gehört innerhalb der GUI anders gelöst.

Da lobe ich mir doch die GUI von MS Visual C++ oder Delphi und was es sonst alles so gab.
Da wird klar positioniert und fertig! Ich denke bei C Sharp ist es das Gleiche.

Selbst mit der weit komplexeren Internet Programmierung via JSF oder Struts war mir das noch lieber.
Sogar das Asbach Uralte JSP finde ich geradeliniger, wenn man die Programmierung dahinter im Griff hat.

Kennst du, oder irgendwer hier irgendwelche Libraries die besser sind als diese merkwürdigen ADK-Layouts?
BTW: Im übrigen steht ADK auch als Abkürzung für: "Auf dem Klo." (cool)

Gruss Volker

Hilfreich?
Diskutiere mit!
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.182

04.04.2018, 09:52:30 via Website

Kennst du, oder irgendwer hier irgendwelche Libraries die besser sind als diese merkwürdigen ADK-Layouts?

Untern ativen Android gibt es nur diese Layouts. Die sind auch ganz OK wenn man die richtig benutzt.

Und mit richtig benutzt ist gemeint: Richtig im XML Editieren und den Designer nur las Vorschau verwenden. Alles im XML machen, dann passiert auch nichts unerwartetes.
Man muss sich halt einmal mit der XML Sytax auseinandersezen aber dann ist das deutlich besser als der blöde Editor (habe mit Android angefangen, da war der Design Editor deutich schlechter als jetzt. Daher die Vorurteile ;) )

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 2.909

04.04.2018, 10:33:04 via Website

Hallo Volker,

wenn du wirklich was Schönes nach Deinem Geschmack auf die Beine stellen magst, dann kommst du
um eine richtige manuelle Programmierung nicht drumrum.
Das ist im übrigen unter VS auch nicht anders - das mache ich täglich ( C++,MFC,NET)

Und wie schon Pascal richtig bemerkt hat - Den Editor nehme ich auch nur für das Grobe.
Danach Editieren im XML und dann ggf. die Plazierungsanpassung & Blinki Blinki Bunti nur zur Runtime.

Es gibt leider keine vorgefertigte eierlegende Wollmilchsau.

Und für deinen Fall gibt es in der API jede Menge schöner Funktionen, womit du dich nach Herzenslust
zur Runtime austoben kannst.

Entweder schnell fertig mit Standard oder aufwendig etwas Individuelles.
Das ist seit Bestehen des Bits immer so gewesen :-)

— geändert am 04.04.2018, 12:01:25

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 26

04.04.2018, 19:33:36 via Website

Danke zusammen.

Ihr seid schon Richtungsweisend, das hilft weiter.
Werde mich daran gewöhnen ... also müssen ... ans Android XML, also manuell. :?
Ist ja auch nicht so groß der Bildschirm ... :)

@Stefan
Dooooch, die "eierlegende Wollmilchsau", die gibt es.
Doch, doch die gibt es wirklich! Das sind wir, die Entwickler!

Lach! Wird die MFC immer noch eingesetzt? (smug)
vielleicht sollte ich dafür was projektieren?
Schließlich habe ich damit über 10 Jahre für Handel, Banken und Pharmazie entwickelt.
So hier von Panama aus ging das sogar Steuer- und sonstige Abgabenfrei und somit günstiger.

Muss meine Frau für 3 Monate rüber nach Tahiti schicken, ... Tamure lernen
damit die das hier den Kinderchen, Embera, Kuna ... und dem ganzen Gemisch dazwischen beibringt.
Kostet Geld!
Die Schniefnasen haben ja sonst nix! Herzig sind sie ja .... und zwar alle.
Das sind sie die wirklichen Werte!!! Kosten aber schon wieder Geld. Zahlen können die ja nicht!
Wird Zeit, dass ich hier vorort Kiwanis oder den Lions Club (gibt es weltweit) besuche und sehe was die alles treiben.

Gruss Volker

— geändert am 04.04.2018, 19:34:28

Hilfreich?
Diskutiere mit!

Empfohlene Artikel