2013-11-26 97 views
0

以下是我想要完成的。劃分垂直和水平線/視圖

enter image description here

綠線是一條垂直線,這將是一個簡單的查看。紅線將是一條水平線,也是一個簡單的視圖。我想要從RelativeLayout頂部的紅線X量的DPS /像素。然後我想讓綠線水平居中,然後從RelativeLayout頂部延伸到「紅線上方」。

以下是我編譯的代碼,但會產生運行時錯誤。

public class Puzzle extends Activity { 

    RelativeLayout relativelayout; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) {   
     super.onCreate(savedInstanceState); 

     relativelayout = new RelativeLayout(getApplicationContext()); 

     dividers(); 

     setContentView(relativelayout); 
    } 

    public void dividers() { 

     // horizontal line 
     View view0 = new View(this); 
     view0.setBackgroundColor(0xFFC2BEBF); 
     relativelayout.addView(view0, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 2)); 
     view0.setId(0); 

     RelativeLayout.LayoutParams params0 = null; 
     params0.addRule(RelativeLayout.CENTER_VERTICAL); // line 39 
     view0.setLayoutParams(params0); 

     // vertical line 
     View view1 = new View(this); 
     view1.setBackgroundColor(0xFFC2BEBF); 
     relativelayout.addView(view1, new ViewGroup.LayoutParams(2, ViewGroup.LayoutParams.MATCH_PARENT)); 

     RelativeLayout.LayoutParams params1 = null; 
     params1.addRule(RelativeLayout.CENTER_HORIZONTAL); 
     params1.addRule(RelativeLayout.ABOVE, view0.getId()); 
     view1.setLayoutParams(params1); 
    } 
} 

以下是LogCat輸出。

11-22 00:25:02.500: E/AndroidRuntime(4140): FATAL EXCEPTION: main 
11-22 00:25:02.500: E/AndroidRuntime(4140): Process: matt.lyons.tileslider, PID: 4140 
11-22 00:25:02.500: E/AndroidRuntime(4140): java.lang.RuntimeException: Unable to start activity ComponentInfo{matt.lyons.tileslider/matt.lyons.tileslider.Puzzle}: java.lang.NullPointerException 
11-22 00:25:02.500: E/AndroidRuntime(4140):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2176) 
11-22 00:25:02.500: E/AndroidRuntime(4140):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226) 
11-22 00:25:02.500: E/AndroidRuntime(4140):  at android.app.ActivityThread.access$700(ActivityThread.java:135) 
11-22 00:25:02.500: E/AndroidRuntime(4140):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397) 
11-22 00:25:02.500: E/AndroidRuntime(4140):  at android.os.Handler.dispatchMessage(Handler.java:102) 
11-22 00:25:02.500: E/AndroidRuntime(4140):  at android.os.Looper.loop(Looper.java:137) 
11-22 00:25:02.500: E/AndroidRuntime(4140):  at android.app.ActivityThread.main(ActivityThread.java:4998) 
11-22 00:25:02.500: E/AndroidRuntime(4140):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-22 00:25:02.500: E/AndroidRuntime(4140):  at java.lang.reflect.Method.invoke(Method.java:515) 
11-22 00:25:02.500: E/AndroidRuntime(4140):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777) 
11-22 00:25:02.500: E/AndroidRuntime(4140):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593) 
11-22 00:25:02.500: E/AndroidRuntime(4140):  at dalvik.system.NativeStart.main(Native Method) 
11-22 00:25:02.500: E/AndroidRuntime(4140): Caused by: java.lang.NullPointerException 
11-22 00:25:02.500: E/AndroidRuntime(4140):  at matt.lyons.tileslider.Puzzle.dividers(Puzzle.java:39) 
11-22 00:25:02.500: E/AndroidRuntime(4140):  at matt.lyons.tileslider.Puzzle.onCreate(Puzzle.java:24) 
11-22 00:25:02.500: E/AndroidRuntime(4140):  at android.app.Activity.performCreate(Activity.java:5243) 
11-22 00:25:02.500: E/AndroidRuntime(4140):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
11-22 00:25:02.500: E/AndroidRuntime(4140):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2140) 
11-22 00:25:02.500: E/AndroidRuntime(4140):  ... 11 more 

我已經註釋了我的代碼,其中第39行是。我是新手,在沒有XML的情況下用Java完成整個佈局,所以我有點困惑於如何做到這一點,所以任何幫助表示讚賞。我爲什麼得到這個NPE?

+2

'RelativeLayout.LayoutParams params0 = null;'你很驚訝在下一行有NPE嗎? – njzk2

+0

嗯,我不想爲高度和寬度輸入2個數字,因爲我聲明瞭這個視圖的大小,像這樣:'relativelayout.addView(view0,new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT ,2));'。我想我只是不知道如何設置「params0」等於。 – Matt

+0

有關新的'RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,2)'的說法,因爲你之前已經使用過這兩行了? – njzk2

回答

1

可以Initializeparams0像下面然後可以使用addRule

params0 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 2); 
+0

這導致沒有運行時錯誤,但視圖佔用了整個屏幕。我需要像開幕文章中的圖片那樣的細分隔線。 – Matt

+0

我已更新我的帖子,您可以請檢查並嘗試。 – Subbu

0
RelativeLayout.LayoutParams params0 = **null**; 
    // param0 variable is not initialise 
    params0.addRule(RelativeLayout.CENTER_VERTICAL); // line 39 
    view0.setLayoutParams(params0); 

也是這部分

RelativeLayout.LayoutParams params1 = **null**; 
    params1.addRule(RelativeLayout.CENTER_HORIZONTAL); 

初始化部分

RelativeLayout.LayoutParams params0 = new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);; 
1

試試這個,你可以根據你的需要改變寬度,高度和顏色。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
tools:context=".MainActivity" > 

<View 
    android:layout_width="0.5dp" 
    android:layout_height="100dp" 
    android:layout_gravity="center_horizontal" 
    android:background="#DF5555" /> 

<View 
    android:layout_width="match_parent" 
    android:layout_height="0.5dp" 
    android:layout_gravity="center_horizontal" 
    android:background="#E66666" /> 
</LinearLayout> 
+0

我的目標是純粹用Java來做到這一點;沒有XML。 – Matt