2010-09-29 28 views
24

Tôi đang cố thay đổi bố cục tuyến tính hoặc bất kỳ chiều rộng hoặc chiều cao tiện ích con nào khác nhưng lại ném ngoại lệ.Tự động thay đổi chiều rộng hoặc chiều cao của linearlayout trên Android

bố trí của tôi là:

<?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> 

và hoạt động của tôi là:

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

Ném ngoại lệ sau đây:

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) 

Vậy làm thế nào tôi có thể thay đổi kích thước động?

Trả lời

29

Vấn đề ở đây là khi bạn đặt các tham số bố cục loại cần phải là của cha mẹ, trong trường hợp này là FrameLayout. Bạn cần phải làm điều này:

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

cảm ơn rất nhiều ....... nó rất hữu ích cho tôi nhưng làm thế nào tôi có thể xác định cha mẹ của linearlayout. – Pratique

48

Kiểm tra này - http://smartandroidians.blogspot.com/2010/04/changing-layout-height-dynamically.html

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

này cũng hoạt động trên bộ xử lý sự kiện.

+5

nó hoạt động, nhưng cái gì đó nên được nhớ là xem nên có một phụ huynh, nếu không getLayoutParams() sẽ trả về null – Shaegorath

+0

Cảm ơn thats điểm tốt – Tom

+0

Trong dp hoặc px? ... –

4

này cách đơn giản để làm nhiệm vụ của bạn:

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

và một cách khác nếu bạn muốn cho kích thước màn hình về chiều cao và chiều rộng sau đó sử dụng mã dưới đây:

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

hy vọng sử dụng đầy đủ đối với bạn .

Các vấn đề liên quan