Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android上动态更改线性布局宽度或高度_Android - Fatal编程技术网

在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));
         }