Ich habe eine Ansicht bestehend aus TableLayout, TableRow and TextView
. Ich möchte, dass es wie ein Gitter aussieht. Ich muss die Höhe und Breite dieses Gitters ermitteln. Die Methoden getHeight()
und getWidth()
Rückkehr immer 0. Dies geschieht , wenn ich das Netz dynamisch formatieren und auch wenn ich eine XML - Version verwenden.
Wie rufe ich die Dimensionen für eine Ansicht ab?
Hier ist mein Testprogramm, mit dem ich in Debug die Ergebnisse überprüft habe:
import android.app.Activity;
import android.os.Bundle;
import android.widget.TableLayout;
import android.widget.TextView;
public class appwig extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.maindemo); //<- includes the grid called "board"
int vh = 0;
int vw = 0;
//Test-1 used the xml layout (which is displayed on the screen):
TableLayout tl = (TableLayout) findViewById(R.id.board);
tl = (TableLayout) findViewById(R.id.board);
vh = tl.getHeight(); //<- getHeight returned 0, Why?
vw = tl.getWidth(); //<- getWidth returned 0, Why?
//Test-2 used a simple dynamically generated view:
TextView tv = new TextView(this);
tv.setHeight(20);
tv.setWidth(20);
vh = tv.getHeight(); //<- getHeight returned 0, Why?
vw = tv.getWidth(); //<- getWidth returned 0, Why?
} //eof method
} //eof class
getHeight()
und getWidth()
nachdem der Aktivitätslebenszyklus die Ansichten gebeten hat, sich selbst zu messen, mit anderen Worten, machen Sie solche Dinge onResume()
und das war's. Sie sollten nicht erwarten, dass ein noch nicht angelegtes Objekt seine Dimensionen kennt, das ist der ganze Trick. Keine Notwendigkeit für die unten vorgeschlagene Magie.
getHeight()/Width()
in onResume()
brachte nicht> 0 Wert für mich.