Динамический текст не вписывается в многострочный

У меня проблема с моим приложением для Android. Я хочу динамически создать 4 TableRows в TableLayout. Каждая из этих строк будет содержать 1 TextView. Я хочу, чтобы TextView выглядел так:

 textview1
 textview2
 textview3
 textview4

в 4 разных ряда.

Я могу динамически создавать Tewtview, но размеры не совпадают. Например, если мое первое текстовое представление содержит большой текст, оно выглядит как один текст без продолжения на следующую строку.

Прочитал много похожих вопросов, но решения не нашел. Вот мой файл макета:

<Relativelayout>

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_marginTop="10dip" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_below="@+id/didyoudo"
android:layout_above="@+id/bardown" android:scrollbarFadeDuration="1000"
android:scrollbarSize="12dip">

<TableLayout android:id="@+id/answertable"
    android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:stretchColumns="0,1" android:collapseColumns="2">


  </TableLayout>
</ScrollView>
<Relativelayout/>

И вот как я динамически генерирую строки и текстовое представление

for (k =0; k< questionCount;k++ ) {
                    //tmpDict = trivialist.get(k);
                    Trivia trivia = trivialist.get(k);
                    TableRow row = new TableRow(getApplicationContext());
                    TableRow row1 = new TableRow(getApplicationContext());
                    TableRow row2 = new TableRow(getApplicationContext());
                    TableRow row3 = new TableRow(getApplicationContext());
                    TextView tv1 = new TextView(getApplicationContext());
                    TextView tv2 = new TextView(getApplicationContext());
                    TextView tv3 = new TextView(getApplicationContext());
                    TextView tv4 = new TextView(getApplicationContext());
                     desc = trivia.getAnswerDesc();
                     quizquestion = trivia.getStrQuestion();
                    tv1.setText("\n\t" + quizquestion);
                    tv1.setTextColor(Color.WHITE); 
                    tv1.setSingleLine(false);
                    tv1.setLines(2);
                    tv1.setHorizontallyScrolling(false);
                    tv1.setTextSize(15);
                    tv1.setTypeface(null, Typeface.BOLD);

                            try {
                                //if the below value is null, it means that the selected answer is wrong 
                                // and enters to the else block
                                if (triviaDict.get("correctAnswer") != null) {
                                    String answer = (String) triviaDict.get("correctAnswer");
                                    tv2.setText("\n\t" + "You said: "+ answer + "\n");
                                    tv2.setTextColor(Color.WHITE);
                                    tv2.setSingleLine(false);
                                    tv2.setHorizontallyScrolling(false);
                                    tv2.setTextSize(15);
                                    tv2.setLines(2);
                                    tv2.setTypeface(null, Typeface.BOLD);

                                    tv3.setText("\t" +"That's Right."+ desc+"\n");
                                    tv3.setTextColor(Color.WHITE);
                                    tv3.setSingleLine(false);
                                    tv3.setHorizontallyScrolling(false);
                                    tv3.setTextSize(15);
                                    tv3.setLines(2);
                                    tv3.setTypeface(null, Typeface.BOLD);

                                    tv4.setText("\t" + "_____________________________________" );
                                    tv4.setTextColor(Color.WHITE);
                                    tv3.setHorizontallyScrolling(false);
                                    tv4.setTypeface(null, Typeface.BOLD);
                                } else {
                                    String wronganswer = (String) triviaDict.get("selected");
                                    tv2.setText("\n\t" + "You said:"+ wronganswer +"\n" );
                                    tv2.setTextColor(Color.WHITE);
                                    tv2.setTextSize(15);
                                    tv2.setLines(2);
                                    tv2.setSingleLine(false);
                                    tv2.setTypeface(null, Typeface.BOLD);

                                    tv3.setText("\t" + "Actually," + desc +"\n");
                                    tv3.setTextColor(Color.WHITE);
                                    tv3.setTextSize(15);
                                    tv3.setLines(2);
                                    tv3.setSingleLine(false);
                                    tv3.setTypeface(null, Typeface.BOLD);

                                    tv4.setText("\t" + "_____________________________________" );
                                    tv4.setTextColor(Color.WHITE);
                                    tv3.setHorizontallyScrolling(false);
                                    tv4.setTypeface(null, Typeface.BOLD);
                                }
                            } catch (Exception e) {
                                e.printStackTrace();
                            }


                tv1.setLayoutParams(new TableRow.LayoutParams(0,
                                    android.view.ViewGroup.LayoutParams.WRAP_CONTENT,10));
                tv2.setLayoutParams(new TableRow.LayoutParams(0,
                        android.view.ViewGroup.LayoutParams.WRAP_CONTENT,10));
                tv3.setLayoutParams(new TableRow.LayoutParams(0,
                        android.view.ViewGroup.LayoutParams.WRAP_CONTENT,10));


                    row.addView(tv1);
                    row1.addView(tv2);
                    row2.addView(tv3);
                    row3.addView(tv4);
                    answerTable.addView(row);
                    answerTable.addView(row1);
                    answerTable.addView(row2);
                    answerTable.addView(row3);

                }

Но ничего не работает идеально. Это работает для 3-го текстового просмотра, но не для 1-го. Не знаю, что происходит.

Может ли кто-нибудь сказать мне, что делать.

Обновить

У меня нет проблем с этим кодом, за исключением того, что только tv3 переходит к следующей строке большого текста, но не tv1. Я хочу, чтобы tv1, tv2 и tv3 продолжались в следующей строке в случае большого текста


person tejas    schedule 24.02.2012    source источник
comment
Почему вы используете макет таблицы вместо LL с вертикальной ориентацией   -  person AAnkit    schedule 24.02.2012
comment
@Ankit, я хочу динамически создавать строки, содержащие текстовое представление. Итак, я использую это, как вы думаете, с LL я могу это сделать?   -  person tejas    schedule 27.02.2012
comment
очевидно, вы можете это сделать. с LL этого очень легко добиться, единственный недостаток в том, что вы видите повышение уровня иерархии.   -  person AAnkit    schedule 27.02.2012
comment
@Ankit, я пробовал с этим типом XML и кодом Java выше ‹ScrollView xmlns:android=схемы .android.com/apk/res/android android:layout_marginTop=10dip android:layout_width=fill_parent android:layout_height=wrap_content android:layout_below=@+id/didyoudo android:layout_above=@+id/bardown android:scrollbarFadeDuration =1000 android:scrollbarSize=12dip› ‹LinearLayout android:orientation=vertical android:id=@+id/answertable android:layout_height=wrap_content android:layout_width=fill_parent› ‹/LinearLayout› ‹/ScrollView›   -  person tejas    schedule 27.02.2012
comment
Вместо добавления строк я добавляю текстовые представления к линейному макету. Но ничего не генерируется, кроме строки, т.е. tv4   -  person tejas    schedule 27.02.2012


Ответы (2)


Наконец, я придумал ответ на этот вопрос. Во-первых, я сохранил целочисленный счетчик, чтобы определить, сколько символов должно помещаться в одну строку. После этого посчитайте общее количество символов в строке. Затем разделите первое целое число на общее количество символов в строке. Тогда вы получите целое число. Для моего необходимого я добавил +2 для этого целого числа. Затем установите строки текстового представления на окончательно полученное число.

Таким образом, проблема решена.

person tejas    schedule 05.03.2012

person    schedule
comment
единственная разница в том, что с stretchColumns верно? Это не работает для меня :( - person tejas; 27.02.2012