2012-01-12 91 views
1

我想爲我的Android應用程序設置java的LinearLayout的marginTop。我一直在不停地「逼退」。這是我的代碼:如何使用Java for Android設置LinearLayout上的marginTop?

LinearLayout lay = (LinearLayout) findViewById(R.id.linearLayout1); 
    LayoutParams lp = lay.getLayoutParams(); 
    lp.setMargins(10, 20, 30, 40); 
    lay.setLayoutParams(lp); 

我在做什麼錯?

這是我得到我的logcat:

01-12 18:50:16.237: D/AndroidRuntime(482): Shutting down VM 
01-12 18:50:16.237: W/dalvikvm(482): threadid=3: thread exiting with uncaught exception (group=0x4001b188) 
01-12 18:50:16.237: E/AndroidRuntime(482): Uncaught handler: thread main exiting due to uncaught exception 
01-12 18:50:16.247: E/AndroidRuntime(482): java.lang.RuntimeException: Unable to start activity ComponentInfo{nu.katterevyn/nu.katterevyn.StartActivity}: java.lang.NullPointerException 
01-12 18:50:16.247: E/AndroidRuntime(482): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496) 
01-12 18:50:16.247: E/AndroidRuntime(482): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 
01-12 18:50:16.247: E/AndroidRuntime(482): at android.app.ActivityThread.access$2200(ActivityThread.java:119) 

謝謝!

+1

請發佈logcat堆棧跟蹤。 – kosa 2012-01-12 18:08:37

回答

1

變化LayoutParams變爲LinearLayout.LayoutParamslp.setMargins(0, top, 0, 0);。此外,請指定您的利潤單位,例如:dp, px

+0

如何指定單位? – AlexanderNajafi 2012-01-12 18:30:49

+0

對不起,你不需要指定一個單位,這是默認的像素,如文中指出的那樣http://developer.android.com/reference/android/view/ViewGroup.MarginLayoutParams.html#setMargins(int,int, int,int) – mauriyouth 2012-01-12 18:36:14

+0

好的,謝謝。但它說,getLayoutParams()不能轉換爲LinearLayout.LayoutParams,我甚至不能運行代碼。這是我的: LinearLayout lay =(LinearLayout)findViewById(R.id.linearLayout1); \t \t LinearLayout.LayoutParams lp = lay.getLayoutParams(); – AlexanderNajafi 2012-01-12 18:39:29

0

要指定單位與DP您可以:

DisplayMetrics metrics = new DisplayMetrics(); 
a.getWindowManager().getDefaultDisplay().getMetrics(metrics); 
return (size * metrics.densityDpi)/DisplayMetrics.DENSITY_DEFAULT; 
2

使用下面的代碼

LinearLayout lay = (LinearLayout) findViewById(R.id.linearLayout1); 
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams)lay.getLayoutParams(); 
lp.setMargins(10, 20, 30, 40); 
lay.setLayoutParams(lp); 

謝謝!

相關問題