2014-02-05 5 views
2

Я реализовал Dynamic TextViews. Я могу просмотреть динамически созданный текст. однако мне необходимо реализовать scrollview:Прокрутка не работает Android

1. Использование только кода.

Просьба помочь.
Как достичь этих двух функциональных возможностей? ниже код работает нормально (он получает все TextView и отображает на экране динамически, но без функциональности прокрутки)

TextView[] textViewArray = new TextView[iterator]; 

      for(int i = 0; i < iterator; i++) { 
        textViewArray[i] = new TextView(narutoLinksOnly.this); 
        textViewArray[i].setText(narutoLinkHeadingName[i]); 
        textViewArray[i].setId(i); 
        textViewArray[i].setTextColor(0xff000000); 
        textViewArray[i].setTextSize(20); 
        textViewArray[i].setOnClickListener(this); 

        textViewArray[i].setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));//suggested 
        //textViewArray[i].setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); 

        ((LinearLayout) linearLayout).addView(textViewArray[i]); 

       } 

InSide OnCreate:

linearLayout = findViewById(R.id.dynamicTextview1); 

XML код:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/dynamicTextview1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@color/Ivory" 
    android:orientation="vertical" > 



</LinearLayout> 
+1

введите линейную прокрутку внутри scrollview в xml .. – Ranjit

+0

@RanjitPati Да Это работает так :). Но как мы можем добиться того же, используя код, а не определяя его в xml. – SeasonalShot

+0

move xmlns: android = "http://schemas.android.com/apk/res/android", чтобы прокрутить viewth родительский элемент вашего макета –

ответ

1

Я попробовал еще раз в своем редакторе с различными значениями и именами, но концепция такая же, как и вы.

Мой активность класса, т.е. MainActivity.java:

public class MainActivity extends Activity implements OnClickListener { 
    ScrollView scrollView; 
    LinearLayout linearLayout; 
    String[] narutoLinkHeadingName = { "abcv", "bvvvv", "cvvvv", "dvvvv", 
     "avvvv", "bvvvv", "cvvvv", "d", "a", "b", "c", "d", "a", "b", "c", 
     "d", "avvvv", "b", "c", "d", "a", "vvvb", "c", "vvvvd", "a", 
     "vvvb", "cvvvv", "vvvvd" }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    linearLayout = (LinearLayout) findViewById(R.id.dynamicTextview1); 

    scrollView = new ScrollView(MainActivity.this); 
    scrollView.setBackgroundColor(Color.BLUE); 

    TextView[] textViewArray = new TextView[narutoLinkHeadingName.length]; 

    for (int i = 0; i < narutoLinkHeadingName.length; i++) { 
     textViewArray[i] = new TextView(MainActivity.this); 
     textViewArray[i].setText(narutoLinkHeadingName[i]); 
     textViewArray[i].setId(i); 
     textViewArray[i].setTextColor(0xff000000); 
     textViewArray[i].setTextSize(20); 
     textViewArray[i].setOnClickListener(this); 
     textViewArray[i].setLayoutParams(new LinearLayout.LayoutParams(
       LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));// suggested 

     ((LinearLayout) linearLayout).addView(textViewArray[i]); 
    } 
    if(((ViewGroup)linearLayout.getParent()) != null){ 
     ((ViewGroup)linearLayout.getParent()).removeView(linearLayout); 

     scrollView.addView(linearLayout); 
     addContentView(scrollView, new LayoutParams(LayoutParams.MATCH_PARENT, 
       LayoutParams.MATCH_PARENT)); 
    }else{ 
     scrollView.addView(linearLayout); 
     addContentView(scrollView, new LayoutParams(LayoutParams.MATCH_PARENT, 
       LayoutParams.MATCH_PARENT)); 
    } 

} 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
    } 

    @Override 
    public void onClick(View v) { 
    // TODO Auto-generated method stub 

    } 

    } 

Мой макет т.е. activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/dynamicTextview1" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#ff00ff" 
android:orientation="vertical" > 
</LinearLayout> 

Теперь его отлично прокрутки по вертикали и для горизонтальной прокрутки вы можете использовать HorizontalScrollView на сайте разработчика.

ПРИМЕЧАНИЕ: Мы должны заботиться о removeView() метод в противном случае он может дать IllegalStateException как Указанный ребенок уже имеет родителя. Вы должны сначала позвонить removeView() родительскому элементу ребенка

+0

Прокрутка должна соответствовать match_parent, а не wrap_content, TextView, с другой стороны, должен wrap_content (чтобы разрешить просмотр прокрутки для измерения размера во время onMeasure и onLayout). И, наконец, не используйте FILL_PARENT, который устарел. –

+0

Спасибо Martin ... – Ranjit

+0

@Ranjit Когда вы выполняете scrollView.addView (linearLayout); вы помещаете scrollview insde в линейный макет или наоборот? – SeasonalShot

0

просто введите ваш linearlayout внутри scrollview в xml.

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_alignParentTop="true" > 
<LinearLayout 
    android:id="@+id/dynamicTextview1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@color/Ivory" 
    android:orientation="vertical" > 



</LinearLayout> 
</ScrollView> 
+0

На самом деле я отредактировал мой вопрос. Мне нужно добиться этого, используя только код.BTW, ваш предлагаемый способ работает, но я ищу для достижения того же кода. – SeasonalShot

+0

, когда вы добавляете любое представление в scrollView, тогда его высота дочернего макета должна быть wrap_content. – Piyush

Смежные вопросы