Eine genaue Weise zu bestimmen, die der gemessenen Höhe der anzeigen, noch bevor es geändert von GEGANGEN, um SICHTBAR
Heute habe ich ein layout, das wie folgt aussieht. Es enthält.
- Titel text anzeigen " und "Preis" text-Ansicht, was sichtbar ist, immer.
- Beschreibung der Text-Ansicht, die sichtbar oder nicht, je nachdem, erweitern oder reduzieren.
Kollabieren (Während der app-Start)
Erweitern (Wenn der Benutzer tippt auf es)
Ich möchte ein paar nette animation, um es. So, ich bezog mich auf https://stackoverflow.com/a/13381228/72437
Eines der wichtigsten element ist, um zu wissen, die genaue Höhe Beschreibung der Text-Ansicht, noch bevor es sichtbar ist.
Jedoch, ich wissen, ein paar code-Typ. Sie sind nicht präzise
//v is description text view.
v.measure(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
final int targtetHeight = v.getMeasuredHeight();
//v is description text view.
v.measure(MeasureSpec.makeMeasureSpec(LayoutParams.MATCH_PARENT, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(LayoutParams.WRAP_CONTENT, MeasureSpec.EXACTLY));
final int targtetHeight = v.getMeasuredHeight();
Wird das Ergebnis mit dem Wert 32. (Die korrekte gemessene Höhe angenommen, 92). Dies ist die Höhe für die erste Zeile des Textes. Dies endet meine animation endete an
Darf ich wissen, was ist der richtige Weg, um zu bestimmen, die der gemessenen Höhe der anzeigen, noch bevor es geändert von GEGANGEN, um SICHTBAR?
Mein layout code ist wie folgt :
<LinearLayout
android:clickable="true"
android:id="@+id/chart_linear_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:background="@drawable/dummy"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:width="0dp"
android:layout_weight="0.6"
android:layout_height="match_parent"
android:gravity="left"
android:textSize="20sp"
android:textColor="#ff000000"
android:text="Summary chart" />
<TextView
android:id="@+id/chart_price_text_view"
android:layout_width="0dp"
android:width="0dp"
android:layout_weight="0.4"
android:layout_height="match_parent"
android:gravity="right"
android:textSize="20sp"
android:textColor="#ffF76D3C"
android:text="$2.99" />
</LinearLayout>
<TextView
android:visibility="gone"
android:id="@+id/chart_description_text_view"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/currency_exchange_description"
android:textColor="#ff626262"
android:textSize="15sp" />
</LinearLayout>
- Es sei denn, Sie wissen, wie viele Zeilen der text einnehmen wird, gibt es nicht eine Möglichkeit, zu Messen, bevor es gemessen wird. Einen hack Weg, es zu tun sein könnte, um Sie alle zu
INVISIBLE
eher als gegangen, am Anfang Messen, dannGONE
Sie sofort danach. Wenn Sie nur ein paar Ansichten, könnte dies nicht spürbar auf die Benutzer. - Haben Sie eine Erklärung dafür, warum mehrere eingewickelt Zeile nicht funktioniert? Ich dachte, v., Messen(... sollte funktionieren (Obwohl es nicht funktioniert jetzt)
- Nicht sicher, aber ich denke, es ist einfach zu Messen, was erwartet er für eine
TextView
im Allgemeinen. Es kann doch nicht erkennen, es müssen mehrere Zeilen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Deinem 2. code-snippet, das ist fast richtig, aber Sie müssen angeben, pixel, Größen - nicht
FILL_PARENT/MATCH_PARENT
. Sollte dies funktionieren:Müssen Sie einen Verweis auf die ViewGroup, dass
v
ist ein Kind zu bekommen, seine Breite, und definierenMAX_HEIGHT
(oder vielleicht verwenden Sie die übergeordnete Ansicht ist die Höhe?).Außerdem sollten Sie ändern Sie die height-Parameter der zwei TextViews, die innerhalb der horizontalen LinearLayout zu
wrap_content
, als mitmatch_parent
hier können Probleme verursachen. Das LinearLayout ist festgelegt wrap_content, aber die beiden Kinder nicht angegeben, einer Höhe.Habe ich erreicht, dies für mein accordion-Komponente. Ich Stand vor dem exakt gleichen Problem, erweitern mein Akkordeon was die "Ziel" - Höhe, d.h. die Höhe, die es dauern würde, nach der Erweiterung.
Dies gibt die korrekte Höhe:
Können Sie einen Blick auf die accordion-Komponente und die animation auf GitHub: Android Akkordeon-Ansicht