Ich habe RecyclerView, die einige Elemente als Liste auf dem Bildschirm zeigt. Das Layout ist wie folgt:Das Einstellen des oberen Padding für einen RecyclerView funktioniert programmatisch nicht?
<RelativeLayout
android:id="@+id/parent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/top_layout">
<RelativeLayout
android:id="@+id/top_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true">
<TextView
android:id="@+id/tv1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textMultiLine"
android:layout_alignParentTop="true"
android:background="@android:color/holo_blue_light" />
<TextView
android:id="@+id/tv2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/tv1"
android:inputType="textMultiLine"
android:background="@android:color/holo_blue_light" />
</RelativeLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:clipToPadding="false"
android:scrollbars="vertical" />
</RelativeLayout>
In oben Layout tv1
& tv2
einige Informationen haben zu zeigen, kann es einzelne Zeile oder mehreren Leitungen sein, damit sie eine festgelegte Höhe geben nicht möglich ist, damit zusammen mit ihren Eltern ->top_view
sowohl tv1
als auch tv2
haben Höhe als Wrap-Inhalt.
Ich möchte Top-Polsterung von top_view
s Höhe. Dass ich programmatisch tue wie folgt:
top_view = (RelativeLayout) findViewById(R.id.top_view);
list = (RecyclerView) findViewById(R.id.list);
list.setPadding(list.getPaddingLeft(),
top_view.getHeight(),
list.getPaddingRight(),
list.getPaddingBottom());
Aber oben Code hat keine Auswirkung, wenn ich hart codiert Top-Polsterung RecyclerView als android:paddingTop="100dp"
geben es funktioniert, aber ich kann nicht hartcodierte Wert, da es geben ist abhängig von top_view
.
Eine weitere Sache Platzierung list
unter top_view
funktioniert nicht für mich, da ich eine andere Anforderung über diese Polsterung habe.
Warum ist das programmgesteuerte TopPadding nicht funktioniert?
Haben Sie gerade versucht, es zu debuggen? All diese Ansichten Höhen sind wahrscheinlich "0", weil sie noch nicht ausgelegt wurden. Der hässliche Hack besteht darin, 'ViewTreeObserver' zu verwenden, um auf das Layout zu warten, oder Sie können ein benutzerdefiniertes Layout erstellen. –
ich stimme David zu, 'top_view.getHeight()' gibt 0 zurück 0 – pskink
können Sie zeigen, wie das Design auf Ihr Ergebnis schaut? –