[gelöst] wie Margin bei Elementen im GridLayout definieren?

  • 6 Antworten
  • Letztes Antwortdatum
T

Tersus

Gast
Guten Tag,

was genau ist R.Java? Dass R.java automatisch generiert wird und man diese Klasse nicht verändern sollte, ist mir schon bekannt. Und dass darin wohl jedes Objekt notiert wird, welches ich in der activity_main.xml generiere, auch.

Ich habe irgendwo in der activity_main.xml ein Objekt vom Typ GridLayout definiert mit der ID "android:id="@+id/gl". Nun kann ich auf dieses Objekt über (GridLayout) R.id.gl zugreifen. In diesem Objekt befinden sich Objekte, bzw. werden Objekte vom Typ MyTextView (Erweiterung von TextView) angeordnet.

Ich erkläre mal direkt mein Vorhaben:

Ich habe die Klasse TextView erweitert, hier MyTextView genannt, und möchte, dass diese keinen Rand durch Padding erhält, sondern durch Magin. Soweit ich dies beurteilen kann, werden Marginränder vom Layout, welches das Objekt beinhaltet, verwaltet.

Wie muss ich vorgehen? Das hier hat nicht funktioniert:
android - How to Change Margin of TextView - Stack Overflow
 
Zuletzt bearbeitet von einem Moderator:
Ohne dein Mich jetzt im speziellen mit dem GridLayout und deinem Problem zu beschäftigen.

Margin ist soweit ich weiß immer quasi von aussen gegeben.
Heißt das Layout wie du richtig sagst verwaltet das.
Paddings sind immer innerhalb eines Objektes selber, sprich sie fangen an, dann kommt padding und dann der Inhalt.

Ich vermute jetzt, das Gridlayout kann gar keine margins weil im Gridlayout ja die einzelnen Gridfelder direkt nebeneinander liegen, somit bleibt dir nur Padding, wenn du ein Objekt innerhalb des Feldes nicht an den Rand kleben willst.

Oder ich verstehs kann falsch und bin gerade zu müde dazu ;)
 
Die Einstellung für Margin sind ein Attribut im XML, dass die Layout-Elemente beschreibt:

Code:
        <GridLayout 
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
		android:layout_marginTop="10dp"
		android:layout_marginBottom="25dp"
		android:rowCount="1"
		android:columnCount="2"
        >

Anmerkung: Das Margin, dass man im Grid-Layout setzt, ist wohlgemerkt nicht das Margin für die Elemente im GridLayout, sondern für das GridLayout zu benachbarten Layout-Elemente. Die Elemente im GridLayout können jeweils selbst ein Margin-Attribut zugewiesen bekommen! Diese würden den Abstand der Unter-Elemente zu den 'Grid-Kästchen-Rändern' beschreiben.

MfG Uwe
 
u.k-f schrieb:
Die Elemente im GridLayout können jeweils selbst ein Margin-Attribut zugewiesen bekommen! Diese würden den Abstand der Unter-Elemente zu den 'Grid-Kästchen-Rändern' beschreiben.

Und wie weise ich den Elementen des GridLayouts einen Margin per Javacode zu? Also nicht per XML-Attribut.
 
Und wie genau?

Wenn ich in meiner XML ein Objekt vom Typ TextView zu stehen habe und diesem das Attribut android:layout_marginTop="50dp" zuweise, schaut die GUI entsprechend aus. ABER interessanterweise ist ((TextView) findViewById(R.id.tv)).getLayoutParams nicht initialisiert, also null!

Entsprechend dieser Erkenntnis ist es nicht verwunderlich, dass auch das Setzten von ~.setLayoutParams keine Auswirkung auf die GUI hat.

Wie also, um auf die Ausgangsfrage zurück zukommen, per Javacode den Margin setzten?

EDIT:

Ich habe es herausgefunden. Die Layout Objekte, in diesem Falle vom Typ GridLayout, bieten die Methode .addView(View v, LayoutParams lp). Damit übergibt man ein View Objekt mit entsprechenden Layoutparametern an ein Layout Objekt.
 
Zuletzt bearbeitet von einem Moderator:
Tersus schrieb:
EDIT:

Ich habe es herausgefunden. Die Layout Objekte, in diesem Falle vom Typ GridLayout, bieten die Methode .addView(View v, LayoutParams lp). Damit übergibt man ein View Objekt mit entsprechenden Layoutparametern an ein Layout Objekt.

Wieso funktioniert das unter Eclipse nicht? Die App stüzt ab. Unter AIDE ist das nicht der Fall.

Code:
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        TextView tv = new TextView(getApplicationContext());
        tv.setText("Test");
        
        GridLayout.LayoutParams glp = new GridLayout.LayoutParams(GridLayout.spec(1), GridLayout.spec(2));
                
        GridLayout gl = new GridLayout(getApplicationContext());
        gl.setColumnCount(2);
        gl.setRowCount(1);
        
        gl.addView(tv, glp);
        
        ((RelativeLayout) findViewById(R.id.rl)).addView(gl);
        
    }

Kann jemand helfen?
 
Zurück
Oben Unten