我试图改变线性布局或任何其他部件的宽度或高度dynamic,但抛出exception。
我的布局是:
<?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>
和我的活动是:
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)); }
抛出以下exception:
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)
那么如何dynamic地改变尺寸?
检查这个 – http://smartandroidians.blogspot.com/2010/04/changing-layout-height-dynamically.html
ll.getLayoutParams().height = 300; ll.getLayoutParams().width = 200; ll.requestLayout();
这也适用于事件处理程序。
这里的问题是,当你设置布局参数types需要是父,在这种情况下,这是一个FrameLayout。 你需要这样做:
ll.setLayoutParams(new FrameLayout.LayoutParams(30,60));
这个简单的方法来完成你的任务:
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);
另一种方法,如果你想给高度和宽度的屏幕大小,然后使用下面的代码:
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);
希望对你充分使用。