Die Idee, Einschränkungen programmgesteuert festzulegen, kann lästig sein. Diese Lösung funktioniert für jedes Layout, egal ob Einschränkung, linear usw. Der beste Weg wäre, einen Platzhalter, dh ein FrameLayout mit geeigneten Einschränkungen (oder die richtige Platzierung in einem anderen Layout wie z. B. linear), an der Position festzulegen, an der Sie die programmgesteuert erstellte Ansicht erwarten würden haben.
Alles, was Sie tun müssen, ist, die Ansicht programmgesteuert und als untergeordnetes Element mithilfe der addChild()
Methode in das FrameLayout aufzublasen . Dann wird Ihre Sicht zur Laufzeit aufgeblasen und in die richtige Position gebracht. Gemäß der Android-Empfehlung sollten Sie FrameLayout nur eine untergeordnete Ansicht hinzufügen [Link] .
So würde Ihr Code aussehen, vorausgesetzt, Sie möchten TextView programmgesteuert an einer bestimmten Position erstellen:
Schritt 1:
Platzieren Sie in Ihrem Layout, das die aufzublasende Ansicht enthalten würde, ein FrameLayout an der richtigen Position und geben Sie ihm eine ID, z. B. "Container".
Schritt 2
Erstellen Sie ein Layout mit dem Stammelement als Ansicht, die Sie zur Laufzeit aufblasen möchten. Rufen Sie die Layoutdatei als "textview.xml" auf:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">
</TextView>
Übrigens, setzen Sie die Layout-Parameter Ihres FrameLayout immer auf wrap_content, sonst wird das Frame-Layout so groß wie das übergeordnete Element, dh die Aktivität, dh der Telefonbildschirm.
android:layout_width="wrap_content"
android:layout_height="wrap_content"
Wenn nicht festgelegt, wird eine untergeordnete Ansicht des Rahmens standardmäßig links oben im Rahmenlayout angezeigt, sodass Ihre Ansicht einfach links oben auf dem Bildschirm angezeigt wird.
Schritt 3
Gehen Sie in Ihrer oncreate-Methode folgendermaßen vor:
FrameLayout frameLayout = findViewById(R.id.container);
TextView textView = (TextView) View.inflate(this, R.layout.textview, null);
frameLayout.addView(textView);
(Beachten Sie, dass das Festlegen des letzten Parameters von findViewById
to null
und das Hinzufügen einer Ansicht durch Aufrufen der addView()
Containeransicht (frameLayout) dem einfachen Anhängen der aufgeblasenen Ansicht durch Übergeben true
des dritten Parameters von entspricht findViewById()
. Weitere Informationen finden Sie hier .)