Pertanyaan Secara dinamis mengubah lebar atau tinggi linearlayout di Android


Saya mencoba mengubah tata letak linier atau lebar atau tinggi widget lainnya secara dinamis tetapi melempar pengecualian.

Tata letak saya adalah:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/abc"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView   
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="ghghjkgj ghjg hjgj ghj g hjgjgh jhg "
    />
</LinearLayout>

dan Aktivitas saya adalah:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        LinearLayout ll = (LinearLayout)findViewById(R.id.abc);
        ll.setLayoutParams(new LinearLayout.LayoutParams(30,60));
    }

Melempar pengecualian berikut:

E/AndroidRuntime(16052): java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams
E/AndroidRuntime(16052):    at android.widget.FrameLayout.onLayout(FrameLayout.java:288)
E/AndroidRuntime(16052):    at android.view.View.layout(View.java:7035)
E/AndroidRuntime(16052):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249)
E/AndroidRuntime(16052):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125)
E/AndroidRuntime(16052):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1042)
E/AndroidRuntime(16052):    at android.view.View.layout(View.java:7035)
E/AndroidRuntime(16052):    at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
E/AndroidRuntime(16052):    at android.view.View.layout(View.java:7035)
E/AndroidRuntime(16052):    at android.view.ViewRoot.performTraversals(ViewRoot.java:1045)
E/AndroidRuntime(16052):    at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
E/AndroidRuntime(16052):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(16052):    at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(16052):    at android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime(16052):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(16052):    at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(16052):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/AndroidRuntime(16052):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/AndroidRuntime(16052):    at dalvik.system.NativeStart.main(Native Method)

Jadi bagaimana saya bisa mengubah dimensi secara dinamis?


24
2017-09-29 12:45


asal


Jawaban:


Periksa ini - http://smartandroidians.blogspot.com/2010/04/changing-layout-height-dynamically.html

ll.getLayoutParams().height = 300;
ll.getLayoutParams().width = 200;
ll.requestLayout();

Ini juga berfungsi pada pengendali event.


49
2017-07-05 12:06



Masalahnya di sini adalah bahwa ketika Anda mengatur tata letak params jenis perlu dari orang tua, dalam hal ini adalah FrameLayout. Anda perlu melakukan ini:

ll.setLayoutParams(new FrameLayout.LayoutParams(30,60));

29
2017-09-29 12:50



Cara sederhana untuk melakukan tugas Anda:

setContentView(R.id.main);    
LinearLayout layout= (LinearLayout) findViewById(R.id.left);
int width=60;
int height=60;
LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(width,height);
layout.setLayoutParams(parms);

dan cara lain jika Anda ingin memberikan ukuran layar dalam tinggi dan lebar kemudian gunakan kode di bawah ini:

setContentView(R.id.main);    
Display display = getWindowManager().getDefaultDisplay();
LinearLayout layout= (LinearLayout) findViewById(R.id.left);
int width=display.getWidth();
int height=display.getHeight();
LinearLayout.LayoutParams parms = new inearLayout.LayoutParams(width,height);
layout.setLayoutParams(parms);

harap gunakan penuh untuk Anda.


5
2017-12-17 13:38