2012-06-11 4 views
3

Я хочу сделать ScrollView с LinearLayout внутри. Линейная планировка содержит 6 View, которые имеют фоновую ГОЛУБОЙ, СИНИЙ, ГОЛУБОЙ, СИНИЙ и т.д. ... Это код:Android - Сделать ScrollView с LinearLayout

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 содержит LinearLayout, устанавливаемого setContentView(ViewLayout);

ответ

3

См http://www.vogella.com/articles/Android/article.html#gridlayout_scrollview

Вместо TextView вы можете объявить любой Чайлдс и хочет.
Просто важно, чтобы ваш scrollview имел только ОДИН щит (т. Е. LinearLayout).
Кроме того, вы должны ВСЕГДА указывать как можно больше макетов в xml!

<?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! Эта работа наверняка, но я делаю gui без xml-файла, если я не хочу объявлять действие или добавлять разрешение. Я бы пошел за вашим советом, но xml требует изучения другого синтаксиса другого языка. Так почему я могу это сделать? Если требуется ручная работа, я предпочитаю использовать хорошо известную Java и оставлять xml для инструмента автоматического проектирования, такого как DroidDraw и другие. – Bemipefe

1

я делал в основном две ошибки:

Первый передать параметр TableLayout вместо параметра LinearLayout, я имею в виду:

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

И второй, чтобы продлить ScrollView кажутся нехорошо. Таким образом, создание простого объекта ScrollView с LineraLayaout внутри - это решение.

Вот рабочий код:

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