Hallo, ich verwende folgende Layoutstruktur in LinearLayout
<TableLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content" >
<TableRow
Android:layout_width="fill_parent"
Android:layout_height="wrap_content" >
</TableRow>
<TableRow
Android:layout_width="fill_parent"
Android:layout_height="wrap_content" >
<TextView
Android:id="@+id/tv1"
Android:layout_height="wrap_content"
Android:gravity="left"
Android:paddingLeft="10dp"
Android:textColor="#000" />
<TextView
Android:id="@+id/tv2"
Android:layout_height="wrap_content"
Android:layout_weight="1.0"
Android:gravity="right"
Android:paddingRight="10dp"
Android:textColor="#000" />
</TableRow>
</TableLayout>
<ImageView
Android:id="@+id/img1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center" />
<RelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="320px"
Android:layout_height="320px"
Android:gravity="center" >
</RelativeLayout>
und Sie möchten die relative Breite und Höhe des Layouts dynamisch aus der Java-Datei festlegen, anstatt sie in der XML-Datei auf 320px zu setzen, dies jedoch nicht tun können. Es ist möglich, das relative Layout im Vollbildmodus mithilfe von match_parent festzulegen, aber ich muss eine andere Ansicht auf den Bildschirm setzen, damit es möglich ist oder ich muss es auf eine andere Weise erreichen ...
Android aktualisiert das Layout von Ansichten NICHT mit wrap_content
, sobald es angezeigt wird . Auch mit invalidate()
oder requestLayout()
. Wenn Sie also eine untergeordnete Ansicht hinzufügen oder den Inhalt dynamisch ändern, sind Sie vermasselt.
getLayoutParams().height = x
plus requestLayout()
ist eine gute Lösung, wenn Sie das "x" kennen und wenn Sie es NUR EINMAL machen müssen. Danach geht der wrap_content
in LayoutParams
verloren, da Sie ihn überschrieben haben.
Um das zu lösen, habe ich eine statische Klasse geschrieben, die die Größen neu berechnet und die Aktualisierung des Layouts für die Ansichten mit wrap_content
erzwingt. Den Code und die zu verwendenden Anweisungen finden Sie hier:
https://github.com/ea167/Android-layout-wrap-content-updater
Genießen!
versuchen Sie es mit diesem
getLayoutParams().height= x;
requestLayout(); or invalidate();
geben Sie Ihrem relativen Layout in .xml eine ID:
Android:id="@+id/relativelayout"
schreibe jetzt in deine Java-Datei:
RelativeLayout Rl = (RelativeLayout) findViewById(R.id.relativelayout);
RelativeLayout.LayoutParams layout_description = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT or YourUserDefinedwidth,
RelativeLayout.LayoutParams.FILL_PARENT or YourUserDefinedHeight);
Rl.setLayoutParams(layout_description);
Dieses Problem, die beste Lösung für die dynamische Änderung der relativen Layoutbreite und -höhe, ist auf diese Weise aufgetreten
RelativeLayout relMain = (RelativeLayout) convertView.findViewById(R.id.relMain);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.width =200;
params.height =200;
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
relMain.setLayoutParams(params);
Unter dem folgenden Code können Sie Gerätehöhe und -breite erhalten: -
Display display = getWindowManager().getDefaultDisplay();
int width = (display.getWidth() );
int height = (display.getHeight() );
paramsTop Ihr realistisches Layout: -
Jetzt können Sie die gewünschte Höhe oder Breite einstellen.
paramsTop = new RelativeLayout.LayoutParams(width, height);
Sie können Ansichtenabmessungen mit LayoutParams ..__ dynamisch festlegen.
RelativeLayout layout = (RelativeLayout) findViewById(R.id.yourlayout_id);
// Gets the layout params that will allow you to resize the layout
LayoutParams params = layout.getLayoutParams();
params.height = 320;
params.width = 320;
Wenn Sie die Höhe ändern möchten, wäre dies ein Trick.
RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.yourId);
relativeLayout.getLayoutParams().height = 100;
relativeLayout.getLayoutParams().width = 100;