1

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:

  1. Bitte erklären Sie, warum das passiert?

  2. 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(); 

Antwort

0

1-bitte erklären, warum das geschieht?

in XML-Layoutdateien. Sie verwenden die Werte in dp. Und der berechnete Wert 533 ist 533px .So in Layout XML-Datei

android:layout_height="533px" 

verwenden Sie das gleiche Ergebnis.

+0

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

+0

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 –

+0

Ich denke Ihre Konvertierung war falsch. Überprüfen Sie die letzte Antwort. –

0

Zuerst müssen Sie über die Größen here lesen. Es sagt

Die Umwandlung von dp-Einheiten zu Bildschirmpixel ist einfach: px = dp * (dpi/160). Auf einem Bildschirm mit 240 dpi entspricht 1 dp beispielsweise 1,5 physikalischen Pixeln. Sie sollten beim Definieren der Benutzeroberfläche Ihrer Anwendung immer dp-Einheiten verwenden, um eine ordnungsgemäße Anzeige Ihrer Benutzeroberfläche auf Bildschirmen mit unterschiedlichen Dichten sicherzustellen.

1-bitte erklären, warum das passiert?

Das liegt daran, wie diese Pixel gerendert werden. Wenn Sie es in XML tun, ist es statisch gerendert und wenn Sie es in Java tun, ist es dynamisch gerendert.

0

2-wie für den geposteten Code, wenn ich die "TypedValue.COMPLEX_UNIT_DIP" zu einer anderen Einheit wie "TypedValue.COMPLEX_UNIT_PX" ändert überhaupt keine Änderung. Warum gibt es keinen Effekt der Änderung der Einheit des LayoutParameters

ans: Der Rückgabewert wird in px sein.

enter image description here

enter image description here

enter image description here

Verwandte Themen