MATCH_PARENT, wenn die Geschwisteransicht größer ist, WRAP_CONTENT, wenn die Geschwisteransicht kleiner ist

Ich habe zwei Ansichten in einem Layout. Ich nenne sie View A bzw. View B

 ┌──────┐ │┌─┐┌─┐│ ││A││B││ │└─┘└─┘│ └──────┘ 

Die Höhe des übergeordneten Layouts (einschließlich View A und View B ) ist WRAP_CONTENT .

  • Wie kann ich dynamisch erkennen, ob meine Anwendung System oder normal ist?
  • Wo finde ich API Key und API Geheimnis für Facebook?
  • IScroll 4 funktioniert nicht mit Formular <select> element iPhone Safari und Android Browser
  • Wie kann ich Tooltip-Beschreibung in Android Studio anzeigen?
  • Android.support.v7.widget.AppCompatTextView kann nicht in android.widget.RelativeLayout geworfen werden
  • ActiveAndroid Update () Abfrage
  • Hier ist die Höhe der View B WRAP_CONTENT . Das heißt, seine Höhe kann in Bezug auf seinen Inhalt geändert werden.

    Was ich tun möchte, ist

    1. Setzen Sie die View A die Höhe von View B , wenn der Inhalt von View A kürzer ist als der Inhalt von View B
    2. Setzen Sie die Größe von View A die Höhe des eigenen Inhalts, wenn der Inhalt von View A größer ist als der Inhalt von View B

    Damit,

    ① Wenn der Inhalt von View B größer ist, wird die Höhe von View A die Höhe von View B .

      ┌──────┐ ┌──────┐ │┌─┐┌─┐│ │┌─┐┌─┐│ ││ ││ ││ ││A││ ││ I want ││A││B││, not │└─┘│B││. ││ ││ ││ │ │ ││ │└─┘└─┘│ │ └─┘│ └──────┘ └──────┘ 

    ② Wenn der Inhalt von View B kürzer ist, dann ist die View A der Höhe des eigenen Ateliers.

      ┌──────┐ ┌──────┐ │┌─┐┌─┐│ │┌─┐┌─┐│ ││ ││B││ ││A││B││ I want ││A│└─┘│, not │└─┘└─┘│. ││ │ │ └──────┘ │└─┘ │ └──────┘ 

    Wenn das übergeordnete LinearLayout (Horizontal) , wird die Einstellung von View A in WRAP_CONTENT gegen Fall 1 verstößt und die Größe von View A auf MATCH_PARENT verstößt gegen Fall 2.

    Wenn das übergeordnete RelativeLayout , setzen Sie die View A , um die obere und die untere Note that you cannot have a circular dependency between the size of the RelativeLayout and the position of its children. For example, you cannot have a RelativeLayout whose height is set to WRAP_CONTENT and a child set to ALIGN_PARENT_BOTTOM. übergeordneten RelativeLayout auszurichten. Die Bedingung von RelativeLayout : Note that you cannot have a circular dependency between the size of the RelativeLayout and the position of its children. For example, you cannot have a RelativeLayout whose height is set to WRAP_CONTENT and a child set to ALIGN_PARENT_BOTTOM. Note that you cannot have a circular dependency between the size of the RelativeLayout and the position of its children. For example, you cannot have a RelativeLayout whose height is set to WRAP_CONTENT and a child set to ALIGN_PARENT_BOTTOM.

    Wie kann ich dieses Problem lösen?

  • Wie bekomme ich String aus dem ausgewählten Element von SimpleCursorAdapter?
  • Staging Rollout mit mehreren APKs
  • Android Studio GPU Monitor funktioniert nicht für OpenGLES2
  • Kamera FLASH_MODE_ON funktioniert nicht bei Moto X
  • Wie man Kontakte auf Android 2.0 liest
  • Warum macht die Einstellung imeActionId mit einer vordefinierten ID-Ressource einen Fehler?
  • 3 Solutions collect form web for “MATCH_PARENT, wenn die Geschwisteransicht größer ist, WRAP_CONTENT, wenn die Geschwisteransicht kleiner ist”

    Es gibt verschiedene Möglichkeiten, dies zu ViewGroup , zum Beispiel durch die Schaffung Ihrer eigenen benutzerdefinierten ViewGroup , wahrscheinlich auf einer horizontalen LinearLayout . Allerdings stelle ich fest, dass die einfachste Lösung wäre, die Anforderungen zur Laufzeit dynamisch festzulegen.

    Betrachten Sie das folgende Layout mit nur zwei TextView in einem horizontalen LinearLayout :

     <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/container" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#f00" android:padding="10dp" > <TextView android:id="@+id/first" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#0f0" android:padding="5dp" android:text="One line" /> <TextView android:id="@+id/second" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#00f" android:padding="5dp" android:text="Two\nlines" android:textColor="#fff" /> </LinearLayout> 

    Beide wickeln ihre Höhe, die grundsätzlich entspricht bis zu Ihrer ersten Anforderung.

    Jetzt Anforderung 2: Für Demonstrationszwecke habe ich den Text von TextView in zwei Zeilen gebrochen, um ihn größer zu machen als der erste. Um das erste TextView Match zu machen, ist es die Höhe, alles was du tun musst, ist das:

     LinearLayout container = (LinearLayout) findViewById(R.id.container); final TextView first = (TextView) findViewById(R.id.first); final TextView second = (TextView) findViewById(R.id.second); container.post(new Runnable() { @Override public void run() { int h1 = first.getMeasuredHeight(); int h2 = second.getMeasuredHeight(); if (h1 < h2) first.getLayoutParams().height = h2; } }); 

    Der "Trick" ist, in die Warteschlange der Ansicht zu posten, um sicherzustellen, dass die Logik nicht ausgeführt wird, bis die Kinder gemessen wurden und eine gültige Höhe haben. Für Anforderung 2 muss die Höhe der ersten Ansicht nur geändert werden, wenn die zweite Ansicht größer ist, was genau das ist, was der Teil in der run() Methode macht.

    Sie müssen die Dimensionen der Ansichten programmgesteuert über Layout-Params einstellen. Angenommen, Sie verwenden ein LinearLayout, um die Ansichten zu halten, das ist, was Sie tun würden:

     //the views are called a and b LinearLayout.LayoutParams aParams = a.getLayoutParams(); LinearLayout.LayoutParams bParams = b.getLayoutParams(); int aWidth = aParams.width; int aHeight = aParams.height; int bWidth = bParams.width; int bHeight = bParams.height; if (aHeight >= bHeight) { // do nothing } else { a.setLayoutParams(new LinearLayout.LayoutParams(aWidth, bHeight)); } 

    Wenn Sie ihre Höhen ursprünglich behalten sie als wrap_content in der xml, vor dieser Änderung.

    Dies kann sehr leicht gelöst werden, von nur der axml.

    Halten Sie die Höhe des übergeordneten Layouts als wrap_content und legen Sie die Größe jedes Kindes auf match_parent. Dies wird dazu führen, dass die Höhe des übergeordneten Layouts zum höchsten Kind umhüllt wird und die Größe jedes Kindes, um die Eltern zu dehnen.

     <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="text" /> <TextView android:layout_width="wrap_content" android:layout_height="match_parent" android:text="More\ntext" /> </LinearLayout> 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.