webentwicklung-frage-antwort-db.com.de

Ändern Sie die Breite und Höhe des relativen Layouts dynamisch

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 ...

15
Vikas Panwar

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!

25
Eric

versuchen Sie es mit diesem

getLayoutParams().height= x;
requestLayout(); or invalidate(); 
14
Anu

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);
6
KDeogharkar

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);
2
Binesh Kumar

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);
2
duggu

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;
2
Prati

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;
0
shaiban