2012-06-11 5 views
3

안에 LinearLayout이있는 ScrollView를 만들고 싶습니다. 선형 레이아웃 배경 CYAN이 6보기를 포함, BLUE는, 시안, 블루 등 ...이 코드입니다 :안드로이드 - LinearLayout으로 ScrollView 만들기

public class TouchActivity extends Activity 
{ 
    TouchedView TouchView; 

    public void onCreate(Bundle icicle) 
    { 
     super.onCreate(icicle); 

     TouchView = new TouchedView(this); 
     TouchView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT , LayoutParams.WRAP_CONTENT)); 

     //setContentView(TouchView); 
     setContentView(TouchView.ViewLayout); 
    } 

    class TouchedView extends ScrollView 
    { 
     LinearLayout ViewLayout; 
     ListElement Elem1; 
     ListElement Elem2; 
     ListElement Elem3; 
     ListElement Elem4; 
     ListElement Elem5; 
     ListElement Elem6; 


     public TouchedView(Context context) 
     { 
      super(context); 

      ViewLayout = new TableLayout(TouchActivity.this); 
      ViewLayout.setOrientation(LinearLayout.VERTICAL); 

      Elem1 = new ListElement(TouchActivity.this , "CYAN"); 
      Elem1.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT , 100)); 
      Elem2 = new ListElement(TouchActivity.this , "BLUE"); 
      Elem2.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT , 100)); 
      Elem3 = new ListElement(TouchActivity.this , "CYAN"); 
      Elem3.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT , 100)); 
      Elem4 = new ListElement(TouchActivity.this , "BLUE"); 
      Elem4.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT , 100)); 
      Elem5 = new ListElement(TouchActivity.this , "CYAN"); 
      Elem5.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT , 100)); 
      Elem6 = new ListElement(TouchActivity.this , "BLUE"); 
      Elem6.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT , 100)); 

      ViewLayout.addView(Elem1); 
      ViewLayout.addView(Elem2); 
      ViewLayout.addView(Elem3); 
      ViewLayout.addView(Elem4); 
      ViewLayout.addView(Elem5); 
      ViewLayout.addView(Elem6); 

      setFillViewport(false); 
      setContentView(ViewLayout); 

     } 

    } 


    class ListElement extends View 
    { 
     public ListElement(Context context , String TypeName) 
     { 
      super(context); 

      if(TypeName.compareTo("CYAN") == 0) this.setBackgroundColor(Color.CYAN); 

      if(TypeName.compareTo("BLUE") == 0) this.setBackgroundColor(Color.BLUE);  
     } 
    } 
} 

결과는 6 뷰가있는 LinearLayout에 포함되기에 너무 큰 점이다 :

http://img513.imageshack.us/img513/5406/androidbadscrollview2.jpg

하지만 setContentView(TouchView.ViewLayout); 코멘트 내가 //setContentView(TouchView); 내 활동이있는 ScrollView 대신 LinearLayout로 채워 져야 주석을 제거하지만 불행히도 나는 아무것도 볼 수없는 경우. ScrollView가 대신 u를 원하는 차일을 선언 할 수있는 텍스트 뷰의 http://www.vogella.com/articles/Android/article.html#gridlayout_scrollview

참조 setContentView(ViewLayout);

답변

3

에 의해 설정된 LinearLayout를 포함

참고.
스크롤보기에는 하나의 외장 (예 : linearLayout) 만있는 것이 중요합니다.
또한 가능한 한 많은 레이아웃을 XML로 작성해야합니다! I 행한

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:fillViewport="true" 
    android:orientation="vertical" > 

    <LinearLayout 
     android:id="@+id/LinearLayout01" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 

     <TextView 
      android:id="@+id/TextView01" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="This is a header"> 
     </TextView> 

    </LinearLayout> 

</ScrollView> 
+0

가 도움 @Thomas K 주셔서 감사합니다 :

다음은 작업 코드입니다! 이 작업은 확실하지만 나는 XML 파일없이 gui를하고 있는데, 활동을 선언하거나 권한을 추가하고 싶지 않다면 말이다. 팁을 따르 겠지만 xml은 다른 언어의 다른 구문을 배워야합니다. 그래서 내가 왜 이럴 수 있니? 수동 작업이 필요한 경우 잘 알고 Java를 사용하고 DroidDraw 및 기타와 같은 자동 설계 도구에 XML을 두는 것을 선호합니다. – Bemipefe

1

주로 두 에러 :

제 대신있는 LinearLayout 파라미터의 TableLayout을 파라미터를 전달하는, 말 :

Elem1.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT , 100)); 

그리고있는 ScrollView 연장 제는 것으로 보인다 좋은 일이 아니야. 그래서 내부에 LineraLayaout이있는 간단한 ScrollView 객체를 만드는 것이 해결책입니다.

public class TouchActivity extends Activity 
{ 

    public void onCreate(Bundle icicle) 
    { 
     super.onCreate(icicle); 

     ScrollView MainView; 
     LinearLayout ViewLayout; 

     ListElement Elem1; 
     ListElement Elem2; 
     ListElement Elem3; 
     ListElement Elem4; 
     ListElement Elem5; 
     ListElement Elem6; 

     MainView = new ScrollView(this); 

     ViewLayout = new LinearLayout(this); 
     ViewLayout.setOrientation(LinearLayout.VERTICAL); 
     ViewLayout.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT , LayoutParams.WRAP_CONTENT)); 

     Elem1 = new ListElement(this , "CYAN"); 
     Elem1.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT , 100)); 
     Elem2 = new ListElement(this , "BLUE"); 
     Elem2.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT , 100)); 
     Elem3 = new ListElement(this , "CYAN"); 
     Elem3.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT , 100)); 
     Elem4 = new ListElement(this , "BLUE"); 
     Elem4.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT , 100)); 
     Elem5 = new ListElement(this , "CYAN"); 
     Elem5.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT , 100)); 
     Elem6 = new ListElement(this , "BLUE"); 
     Elem6.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT , 100)); 

     ViewLayout.addView(Elem1); 
     ViewLayout.addView(Elem2); 
     ViewLayout.addView(Elem3); 
     ViewLayout.addView(Elem4); 
     ViewLayout.addView(Elem5); 
     ViewLayout.addView(Elem6);  

     ViewLayout.requestLayout(); 
     MainView.addView(ViewLayout); 
     setContentView(MainView); 

    } 

    class ListElement extends View 
    { 
     public ListElement(Context context , String TypeName) 
     { 
      super(context); 

      if(TypeName.compareTo("CYAN") == 0) this.setBackgroundColor(Color.CYAN); 

      if(TypeName.compareTo("BLUE") == 0) this.setBackgroundColor(Color.BLUE);  
     } 
    } 
} 
관련 문제