是否有可能改变布局宽度和高度的Andr​​oid在运行时? [英] Is it possible to change the layout width and height in Android at run time?

查看:199
本文介绍了是否有可能改变布局宽度和高度的Andr​​oid在运行时?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个相对布局。两者都有宽度填充母和100浸高度。我的要求是,当我点击第一个布局应该缩小到50dip高度和其他扩展到150dip的高度。虽然这样做,我得到了异常。请帮助我如何改变布局的宽度和高度在运行时。

 最后的LinearLayout RLChange =新的LinearLayout(本);
    RLChange.setLayoutParams(新的LayoutParams(LayoutParams.FILL_PARENT,
                                             LayoutParams.FILL_PARENT));
    RLChange.setOrientation(LinearLayout.VERTICAL);

    最后的LinearLayout RLGreen =新的LinearLayout(本);
    RLGreen.setLayoutParams(新的LayoutParams(LayoutParams.FILL_PARENT,
                                             300));
    RLGreen.setBackgroundColor(Color.GREEN);
    RLGreen.setOrientation(LinearLayout.HORIZONTAL);

    按钮btnClick =新的按钮(这一点);
    btnClick.setLayoutParams(新的LayoutParams(LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT));
    btnClick.setBackgroundColor(Color.RED);

    RLGreen.addView(btnClick);


    最后的LinearLayout RLYell​​ow =新的LinearLayout(本);
    RLYell​​ow.setLayoutParams(新的LayoutParams(LayoutParams.FILL_PARENT,
                                             200));
    RLYell​​ow.setBackgroundColor(Color.YELLOW);


    btnClick.setOnClickListener(新View.OnClickListener(){
        公共无效的onClick(视图查看){
                    Toast.makeText(getApplicationContext(),咔嚓,Toast.LENGTH_SHORT).show();
                    RLGreen.setLayoutParams(新的LayoutParams(LayoutParams.FILL_PARENT,
                            LayoutParams.FILL_PARENT));
        }
     });

    RLChange.addView(RLGreen);
    RLChange.addView(RLYell​​ow);
    的setContentView(RLChange);




登录猫


十一月3日至10日:01:35.328:信息/ NotificationService(574):enqueueToast PKG = Changewidth.com callback=android.app.ITransientNotification$Stub$Proxy@43948648时间= 0
十一月3日至10日:01:35.388:DEBUG / AndroidRuntime(1505):关闭虚拟机
十一月3日至10日:01:35.388:WARN / dalvikvm(1505):主题ID = 3:线程退出与未捕获的异常(组= 0x4001aa28)
十一月3日至10日:01:35.398:ERROR / AndroidRuntime(1505):未捕获的处理程序:螺纹主力退出,由于未捕获的异常
十一月3日至10日:01:35.449:ERROR / AndroidRuntime(1505):java.lang.ClassCastException:android.view.ViewGroup $的LayoutParams
十一月3日至10日:01:35.449:ERROR / AndroidRuntime(1505):在android.widget.LinearLayout.measureVertical(LinearLayout.java:326)
十一月3日至10日:01:35.449:ERROR / AndroidRuntime(1505):在android.widget.LinearLayout.onMeasure(LinearLayout.java:278)
十一月3日至10日:01:35.449:ERROR / AndroidRuntime(1505):在android.view.View.measure(View.java:7703)
十一月3日至10日:01:35.449:ERROR / AndroidRuntime(1505):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:2989)
十一月3日至10日:01:35.449:ERROR / AndroidRuntime(1505):在android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
十一月3日至10日:01:35.449:ERROR / AndroidRuntime(1505):在android.view.View.measure(View.java:7703)
十一月3日至10日:01:35.449:ERROR / AndroidRuntime(1505):在android.widget.LinearLayout.measureVertical(LinearLayout.java:464)
十一月3日至10日:01:35.449:ERROR / AndroidRuntime(1505):在android.widget.LinearLayout.onMeasure(LinearLayout.java:278)
十一月3日至10日:01:35.449:ERROR / AndroidRuntime(1505):在android.view.View.measure(View.java:7703)
十一月3日至10日:01:35.449:ERROR / AndroidRuntime(1505):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:2989)
十一月3日至10日:01:35.449:ERROR / AndroidRuntime(1505):在android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
十一月3日至10日:01:35.449:ERROR / AndroidRuntime(1505):在android.view.View.measure(View.java:7703)
十一月3日至10日:01:35.449:ERROR / AndroidRuntime(1505):在android.view.ViewRoot.performTraversals(ViewRoot.java:747)
十一月3日至10日:01:35.449:ERROR / AndroidRuntime(1505):在android.view.ViewRoot.handleMessage(ViewRoot.java:1613)
十一月3日至10日:01:35.449:ERROR / AndroidRuntime(1505):在android.os.Handler.dispatchMessage(Handler.java:99)
十一月3日至10日:01:35.449:ERROR / AndroidRuntime(1505):在android.os.Looper.loop(Looper.java:123)
十一月3日至10日:01:35.449:ERROR / AndroidRuntime(1505):在android.app.ActivityThread.main(ActivityThread.java:4203)
十一月3日至10日:01:35.449:ERROR / AndroidRuntime(1505):在java.lang.reflect.Method.invokeNative(本机方法)
十一月3日至10日:01:35.449:ERROR / AndroidRuntime(1505):在java.lang.reflect.Method.invoke(Method.java:521)
十一月3日至10日:01:35.449:ERROR / AndroidRuntime(1505):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:791)
十一月3日至10日:01:35.449:ERROR / AndroidRuntime(1505):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
十一月3日至10日:01:35.449:ERROR / AndroidRuntime(1505):在dalvik.system.NativeStart.main(本机方法)
十一月3日至10日:01:35.479:信息/程序(574):发送信号。 PID:1505 SIG:3
十一月3日至10日:01:35.479:信息/ dalvikvm(1505):主题ID = 7:反应信号3
十一月3日至10日:01:35.619:信息/ dalvikvm(1505):写堆栈跟踪/data/anr/traces.txt
十一月3日至10日:01:35.779:DEBUG / dalvikvm(623):GC释放3557对象/在448ms 196272字节
 

解决方案

在的onClick监听器添加此code。

 按钮按钮=(按钮)findViewById(view.getId());
的LinearLayout rLGreen =((的LinearLayout)button.getParent());
rLGreen.setLayoutParams(新LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
 

这会工作。

I have two relative layouts. Both have width of fill parent and height of 100 dip. My requirement is when I click the first layout it should shrink to 50dip height and the other expand to the 150dip height. While doing this I got exception. Please help me how to change the layout width and height at run time.

    final LinearLayout RLChange = new LinearLayout(this);        
    RLChange.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                                             LayoutParams.FILL_PARENT)); 
    RLChange.setOrientation(LinearLayout.VERTICAL);

    final LinearLayout RLGreen = new LinearLayout(this);        
    RLGreen.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                                             300));
    RLGreen.setBackgroundColor(Color.GREEN);
    RLGreen.setOrientation(LinearLayout.HORIZONTAL);

    Button btnClick = new Button(this);        
    btnClick.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT));
    btnClick.setBackgroundColor(Color.RED);

    RLGreen.addView(btnClick);


    final LinearLayout RLYellow = new LinearLayout(this);        
    RLYellow.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                                             200));
    RLYellow.setBackgroundColor(Color.YELLOW);


    btnClick.setOnClickListener(new View.OnClickListener() {            
        public void onClick(View view) {  
                    Toast.makeText(getApplicationContext(), "click", Toast.LENGTH_SHORT).show();
                    RLGreen.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                            LayoutParams.FILL_PARENT));  
        }
     });  

    RLChange.addView(RLGreen);
    RLChange.addView(RLYellow);
    setContentView(RLChange);




Log Cat


03-10 11:01:35.328: INFO/NotificationService(574): enqueueToast pkg=Changewidth.com callback=android.app.ITransientNotification$Stub$Proxy@43948648 duration=0
03-10 11:01:35.388: DEBUG/AndroidRuntime(1505): Shutting down VM
03-10 11:01:35.388: WARN/dalvikvm(1505): threadid=3: thread exiting with uncaught exception (group=0x4001aa28)
03-10 11:01:35.398: ERROR/AndroidRuntime(1505): Uncaught handler: thread main exiting due to uncaught exception
03-10 11:01:35.449: ERROR/AndroidRuntime(1505): java.lang.ClassCastException: android.view.ViewGroup$LayoutParams
03-10 11:01:35.449: ERROR/AndroidRuntime(1505):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:326)
03-10 11:01:35.449: ERROR/AndroidRuntime(1505):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:278)
03-10 11:01:35.449: ERROR/AndroidRuntime(1505):     at android.view.View.measure(View.java:7703)
03-10 11:01:35.449: ERROR/AndroidRuntime(1505):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:2989)
03-10 11:01:35.449: ERROR/AndroidRuntime(1505):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
03-10 11:01:35.449: ERROR/AndroidRuntime(1505):     at android.view.View.measure(View.java:7703)
03-10 11:01:35.449: ERROR/AndroidRuntime(1505):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:464)
03-10 11:01:35.449: ERROR/AndroidRuntime(1505):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:278)
03-10 11:01:35.449: ERROR/AndroidRuntime(1505):     at android.view.View.measure(View.java:7703)
03-10 11:01:35.449: ERROR/AndroidRuntime(1505):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:2989)
03-10 11:01:35.449: ERROR/AndroidRuntime(1505):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
03-10 11:01:35.449: ERROR/AndroidRuntime(1505):     at android.view.View.measure(View.java:7703)
03-10 11:01:35.449: ERROR/AndroidRuntime(1505):     at android.view.ViewRoot.performTraversals(ViewRoot.java:747)
03-10 11:01:35.449: ERROR/AndroidRuntime(1505):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1613)
03-10 11:01:35.449: ERROR/AndroidRuntime(1505):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-10 11:01:35.449: ERROR/AndroidRuntime(1505):     at android.os.Looper.loop(Looper.java:123)
03-10 11:01:35.449: ERROR/AndroidRuntime(1505):     at android.app.ActivityThread.main(ActivityThread.java:4203)
03-10 11:01:35.449: ERROR/AndroidRuntime(1505):     at java.lang.reflect.Method.invokeNative(Native Method)
03-10 11:01:35.449: ERROR/AndroidRuntime(1505):     at java.lang.reflect.Method.invoke(Method.java:521)
03-10 11:01:35.449: ERROR/AndroidRuntime(1505):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
03-10 11:01:35.449: ERROR/AndroidRuntime(1505):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
03-10 11:01:35.449: ERROR/AndroidRuntime(1505):     at dalvik.system.NativeStart.main(Native Method)
03-10 11:01:35.479: INFO/Process(574): Sending signal. PID: 1505 SIG: 3
03-10 11:01:35.479: INFO/dalvikvm(1505): threadid=7: reacting to signal 3
03-10 11:01:35.619: INFO/dalvikvm(1505): Wrote stack trace to '/data/anr/traces.txt'
03-10 11:01:35.779: DEBUG/dalvikvm(623): GC freed 3557 objects / 196272 bytes in 448ms

解决方案

In onClick Listener add this code.

Button button = (Button) findViewById(view.getId());
LinearLayout rLGreen = ((LinearLayout) button.getParent());
rLGreen.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

It will work.

这篇关于是否有可能改变布局宽度和高度的Andr​​oid在运行时?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆