Ich habe TextView programmgesteuert zu LinearLayout hinzugefügt und bei einigen externen Ereignissen möchte ich den unteren Rand dieser TextView auf -10 verringern, wofür ich versucht habe, zu folgen.
LinearLayout.LayoutParams lastTxtParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lastTxtParams.setMargins(0, 0, 0, -10);
mOldTextView.setLayoutParams(lastTxtParams);
mOldTextView.invalidate();
Ist der richtige Weg, um den Rand des Widgets zu ändern, der der Ansicht hinzugefügt wurde?
Einige, wie es nicht funktioniert.
Maybe as you are giving the value in -ve
kann ein -ve-Wert sein.Ihr Layout in XML enthält wahrscheinlich bereits ein Attribut layout_margin (Links | Rechts | usw.). Dies bedeutet, dass Sie auf das von dieser XML generierte Objekt zugreifen und es ändern müssen.
Ich fand diese Lösung sehr einfach:
Rufen Sie die LayoutParams-Instanz Ihrer Textansicht ab, übertragen Sie sie auf MarginLayoutParams und legen Sie die Ränder mit der setMargins-Methode fest.
quelle
Dies ist ein kniffliges Problem. Ich habe den Rand auf die Textansicht in einer Zeile eines Tabellenlayouts gesetzt. siehe unten:
Die Klasse, die zum Importieren von LayoutParams zur Verwendung in einer Tabellenzeile benötigt wird, lautet:
wichtig zu beachten, dass ich die Klasse für Tabellenzeile hinzugefügt habe. Ähnlich viele andere Klassen stehen zur Verfügung, um LayoutParams zu verwenden, wie:
android.widget importieren. LinearLayout .LayoutParams;
also entsprechend verwenden.
quelle
setMargins () legt die INNEREN Ränder der Textansicht fest, nicht die Layoutränder. Wollen Sie das tun? Diese zwei unterschiedlichen Ränder können ziemlich kompliziert sein.
Wenn Sie die Layoutränder festlegen möchten, ändern Sie die LayoutParams der Textansicht (textview.getLayoutParams () und anschließend die Parameter des zurückgegebenen LayoutParams-Objekts).
Sie müssen an Ihrem LinearLayout nichts ändern.
Grüße, Oliver
quelle
TextView unterstützt setMargins nicht. Android-Dokumente sagen:
quelle
Hier ist ein anderer Ansatz ...
Wenn ich das gleiche Problem habe, hat mir die hier vorgeschlagene Lösung nicht gefallen. Ich habe mir also einen anderen Weg ausgedacht: Ich habe eine Textansicht in die XML-Datei zwischen den beiden Feldern eingefügt, die ich mit zwei wichtigen Feldern trennen wollte:
Die Höhe ist auf das eingestellt, was ich für die Trennung brauchte.
Nun, ich habe den Code, alles was ich brauchte, um es einfach zu machen, ändere die Sichtbarkeit auf unsichtbar (dh es ist da und nimmt den benötigten Platz ein, aber es ist unsichtbar)
Viola ... Ich habe den nötigen Spielraum. Übrigens, diese Lösung ist für LinearLayout mit vertikaler Ausrichtung, aber Sie können es mit verschiedenen Layouts tun.
Hoffe das hilft.
quelle
Sie haben wahrscheinlich den Layoutrand geändert, nachdem er gezeichnet wurde. mOldTextView.invalidate () ist nutzlos. Sie mussten requestLayout () auf dem übergeordneten Element aufrufen, um die neue Konfiguration weiterzuleiten. Wenn Sie den Code zum Ändern des Layouts vor dem Zeichnen verschoben haben, hat alles einwandfrei funktioniert.
quelle
getLayoutParams () der Textansicht sollte basierend auf dem übergeordneten Element der Textansicht in XML in die entsprechenden Parameter umgewandelt werden .
Verwenden Sie die oben verwendete DptoPxConvertion () -Methode, um dieselbe reale Größe auf verschiedenen Geräten zu rendern. Die Parameter setMargin (links, oben, rechts, unten) nehmen Werte in Pixel und nicht in dp an . Weitere Informationen finden Sie in dieser Linkantwort
quelle