简体   繁体   English

动态Textview不适合多行

[英]Dynamic Textview is not fitting in the multiline

I'm having an issue with my android application. 我的Android应用程序有问题。 I want to dynamically create 4 TableRows in a TableLayout. 我想在TableLayout中动态创建4个TableRows。 Each of this row will contain 1 TextView. 每行将包含1个TextView。 I want the TextView like this: 我想要这样的TextView:

 textview1
 textview2
 textview3
 textview4

in 4 different rows. 在4个不同的行中

I am able to create the Tewtview dynamically but the sizes are not matching. 我可以动态创建Tewtview,但是大小不匹配。 For example if my first textview contains a big text, it appears to be in single text without being continued to the next line 例如,如果我的第一个textview包含大文本,则它似乎是单个文本,而没有继续到下一行

I read a lot of similar questions but couldn't find the solution. 我读了很多类似的问题,但是找不到解决方案。 Here is my layout file: 这是我的布局文件:

<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/>

And this is how I'm generating the rows and textview dynamically 这就是我动态生成行和textview的方式

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

                }

But nothing is working perfect. 但是没有什么是完美的。 This works for the 3rd textview but not for the 1st one. 这适用于第三个文本视图,但不适用于第一个文本视图。 Don't know what is happening. 不知道发生了什么。

Can anybody tell me what to do. 谁能告诉我该怎么办。

Update 更新资料

I do not have any problem with this code except that only tv3 gets proceeded to the next line on large text but not the tv1. 除了只有tv3进入大文本的下一行而不是tv1之外,此代码没有任何问题。 I want tv1, tv2 and tv3 all to be continued in the next line in case of large text 如果文本较大,我希望将tv1,tv2和tv3全部继续在下一行

    <Relativelayout>

<ScrollView 
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="fill_parent"
    android:stretchColumns="0,*" >
  </TableLayout>
</ScrollView>
<Relativelayout/>


****************************** JAVA code : ****************************

for (k =0; k< questionCount;k++ ) {
                    //tmpDict = trivialist.get(k);
                    Trivia trivia = trivialist.get(k);

                    TableRow row = 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));
                tv4.setLayoutParams(new TableRow.LayoutParams(0,
                        android.view.ViewGroup.LayoutParams.WRAP_CONTENT,10));


                    row.addView(tv1);
                    row.addView(tv2);
                    row.addView(tv3);
                    row.addView(tv4);
                    answerTable.addView(row);


                }

Finally, I came up with some answer for this. 最后,我想出了一些答案。 First thing is I kept an integer count to fix how much characters to be fit in a single line. 第一件事是我保留了一个整数以固定一行中可以容纳多少个字符。 After that count the total no of characters in the string. 之后,计算字符串中的字符总数。 Then divide the first integer count by total no of characters in the string. 然后将第一个整数计数除以字符串中的字符总数。 Then you will get an integer number. 然后,您将获得一个整数。 For my required, I added +2 for that integer number. 对于我的要求,我为该整数加了+2。 Then set the lines of the textview to finally obtained number. 然后将textview的行设置为最终获得的数字。

Thus, problem solved. 这样,问题就解决了。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM