Ich berechne die Höhe einiger Elemente in einer ListView und dann ordne ich die berechnete Höhe der ListView programmgesteuert, um sicherzustellen, dass die ListView erweitert wird, um seinen Inhalt aufzunehmen. Ich berechnete die Höhe der Elemente in der ListView wie unten im Code gezeigt. Zum Verständnis der Layout-Einheiten
Wie in dem Code gezeigt, ist die folgende Zeile gibt einen Wert gleich 533:
height += listView.getDividerHeight() * listView.getCount();//
Das Problem ich habe, ist, wenn die Höhe des Listview auf den Wert zurück „533“ eingestellt ist, wie gezeigt, Im Code hat der ListView genau die gleichen Höhen wie sein Inhalt. Aber wenn ich den gleichen Wert „533“ auf den Listview überall „android: layout_height“ in der XML-Datei, dann ist die Listview über seinen Inhalt zu viel erweitert „höher als der Inhalt“
Also meine Fragen sind:
Bitte erklären Sie, warum das passiert?
Wie für den gebuchten Code, wenn ich die "TypedValue.COMPLEX_UNIT_DIP" zu einer anderen Einheit wie "TypedValue.COMPLEX_UNIT_PX" ändern, gibt es überhaupt keine Änderung. Warum gibt es keinen Effekt beim Ändern der Einheit des LayoutParameters?
Code:
int height = 0;
for (int i = 0; i < listView.getCount(); i++) {
View childView = listView.getAdapter().getView(i, null, listView);
childView.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
height+= childView.getMeasuredHeight();
}
//dividers height
height += listView.getDividerHeight() * listView.getCount();// returns 533
param = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, height, this.getResources().getDisplayMetrics()));
param.addRule(RelativeLayout.BELOW, ruleSubject);
container.setLayoutParams(param);
listView.requestLayout();
fine..but wenn ich konvertiere der berechnete Wert "522" erhält 266 dpi ... und wenn ich den claculated dp Wert programmatisch festgelegt, wie in der Code..ich bekomme eine sehr kleine Listenansichtshöhe, auch wenn ich die richtige Einheit im Programmcode programmierte – user2121
In programmatisch müssen Sie es in px.convert geben Sie den Wert auf px.Sie erhalten das gleiche Ergebnis.für die Konvertierung, zu überprüfen die obige Antwort –
Ich denke Ihre Konvertierung war falsch. Überprüfen Sie die letzte Antwort. –