在Android上动态更改线性布局宽度或高度
我试图动态改变线性布局或任何其他小部件的宽度或高度,但抛出异常 我的布局是:在Android上动态更改线性布局宽度或高度,android,Android,我试图动态改变线性布局或任何其他小部件的宽度或高度,但抛出异常 我的布局是: <?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="fil
<?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>
引发以下异常:
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)
那么如何动态更改尺寸呢?这里的问题是,当您设置布局参数时,类型需要是父级的类型,在这种情况下,类型是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);
希望对您使用full。您可以在utils类中使用此方法动态设置高度和宽度。
public void setWidthAndHeight(Context context,RelativeLayout view,int width, int height) {
width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, width, context.getResources().getDisplayMetrics());//used to convert you width integer value same as dp
height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, height, context.getResources().getDisplayMetrics());
//note : if your layout is LinearLayout then use LinearLayout.LayoutParam
view.setLayoutParams(new RelativeLayout.LayoutParams(width, height));
}
非常感谢…….这对我很有帮助,但我如何识别linearlayout的父级。它是有效的,但应该记住的是视图应该有父级,否则getLayoutParams()将返回null px,但您可以将其转换为dp
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);
public void setWidthAndHeight(Context context,RelativeLayout view,int width, int height) {
width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, width, context.getResources().getDisplayMetrics());//used to convert you width integer value same as dp
height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, height, context.getResources().getDisplayMetrics());
//note : if your layout is LinearLayout then use LinearLayout.LayoutParam
view.setLayoutParams(new RelativeLayout.LayoutParams(width, height));
}