2014-03-04 28 views
0

我想创建一个填充空白活动。
例如: “天气是(编辑文本在这里)昨天。” “
”男孩们在休息室里玩(编辑文字在这里)。“ “露西昨天在午餐时喝了酒(编辑于此)。”在文本字符串的中间放置编辑文本的最佳方式是什么?

现在我已经设置了它的方式,在编辑文本之前和之后有一个文本视图。问题是文本视图的文本正在通过putStringExtra方法从意图发送来设置。我永远不知道这两种观点的文本会持续多久。如果文本太长,则第二个视图的文本会在最后聚集起来。也就是说,文本会在第二个文本视图中进行换行。我想要实现的是将文本环绕整个屏幕。目前,我正在检查第二个文本视图的行数。如果不止一个,那么我将该文本放置在第一个布局下的布局的textview中。似乎有一个更简单的方法来做到这一点。这里是我的代码,感谢您的帮助:

public void setText(double w, double t) { 
    final double HalfScreenWidth = w; 
    final double totalScreenWidth = t; 
    TextView1.setText(getIntent().getExtras().getString("SentPart1")); 
    TextView2.setText(getIntent().getExtras().getString("SentPart2")); 
    TextView3.setText(""); 


    TextView1.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED); 
    tVWidth = TextView1.getMeasuredWidth(); 

    if (totalScreenWidth > 1100) { 
     linLay1.removeAllViews(); 
     linLay2.removeAllViews(); 

     linLay1.addView(TextView1); 
     linLay1.addView(EditText); 
     linLay1.addView(TextView2); 
     linLay1.addView(TextView3); 
    } else if (tVWidth > HalfscreenWidth && totalScreenWidth < 1100) { 
     linLay1.removeAllViews(); 
     linLay2.removeAllViews(); 

     linLay1.addView(TextView1); 
     linLay1.addView(EditText); 
     linLay2.addView(TextView2); 
    } else if (tVWidth < HalfScreenWidth && totalScreenWidth < 1100) { 
     linLay1.removeAllViews(); 
     linLay2.removeAllViews(); 
     linLay1.setVisibility(View.INVISIBLE); 
     linLay2.setVisibility(View.INVISIBLE); 
     linLay1.addView(TextView1); 
     linLay1.addView(EditText); 
     linLay1.addView(TextView2); 
     linLay2.addView(TextView3); 
     h.postDelayed(r, 100); 

    } 

} 

final Runnable r = new Runnable() { 
    public void run() { 

     int lineCount = TextView2.getLineCount(); 
     if (lineCount == 1) { 
      linLay2.removeView(TextView3); 
      linLay1.addView(TextView3); 
     } else if (lineCount == 2) { 
      int lineStart0 = TextView2.getLayout().getLineStart(0); 
      int lineEnd0 = TextView2.getLayout().getLineEnd(0); 
      int lineStart = TextView2.getLayout().getLineStart(1); 
      int lineEnd = TextView2.getLayout().getLineEnd(1); 

      CharSequence extraText0 = TextView2.getText().subSequence(
        lineStart0, lineEnd0); 
      CharSequence extraText = TextView2.getText().subSequence(lineStart, 
        lineEnd); 
      TextView2.setText(extraText0); 
      TextView3.setText(extraText); 

     } else if (lineCount == 3) { 
      int lineStart0 = TextView2.getLayout().getLineStart(0); 
      int lineEnd0 = TextView2.getLayout().getLineEnd(0); 
      int lineStart1 = TextView2.getLayout().getLineStart(1); 
      int lineEnd1 = TextView2.getLayout().getLineEnd(1); 
      int lineStart2 = TextView2.getLayout().getLineStart(2); 
      int lineEnd2 = TextView2.getLayout().getLineEnd(2); 

      CharSequence extraText0 = TextView2.getText().subSequence(
        lineStart0, lineEnd0); 
      CharSequence extraText1 = TextView2.getText().subSequence(
        lineStart1, lineEnd1); 
      CharSequence extraText2 = TextView2.getText().subSequence(
        lineStart2, lineEnd2); 

      CharSequence oneTwo = TextUtils.concat(extraText1, extraText2); 
      TextView2.setText(extraText0); 
      TextView3.setText(oneTwo); 

     } else if (lineCount == 4) { 
      int lineStart0 = TextView2.getLayout().getLineStart(0); 
      int lineEnd0 = TextView2.getLayout().getLineEnd(0); 
      int lineStart1 = TextView2.getLayout().getLineStart(1); 
      int lineEnd1 = TextView2.getLayout().getLineEnd(1); 
      int lineStart2 = TextView2.getLayout().getLineStart(2); 
      int lineEnd2 = TextView2.getLayout().getLineEnd(2); 
      int lineStart3 = TextView2.getLayout().getLineStart(3); 
      int lineEnd3 = TextView2.getLayout().getLineEnd(3); 

      CharSequence extraText0 = TextView2.getText().subSequence(
        lineStart0, lineEnd0); 
      CharSequence extraText1 = TextView2.getText().subSequence(
        lineStart1, lineEnd1); 
      CharSequence extraText2 = TextView2.getText().subSequence(
        lineStart2, lineEnd2); 
      CharSequence extraText3 = TextView2.getText().subSequence(
        lineStart3, lineEnd3); 

      CharSequence oneTwo = TextUtils.concat(extraText1, extraText2, 
        extraText3); 
      TextView2.setText(extraText0); 
      TextView3.setText(oneTwo); 
} 
linLay1.setVisibility(View.VISIBLE); 
     linLay2.setVisibility(View.VISIBLE); 
} 

我放在一个可运行的,因为它看起来像Android这样的需求,以在屏幕上绘制文本稍稍停顿。

回答

0

您可以在水平方向上使用LinearLayout,并在EditText的两侧放置TextView。事情是这样的:

<LinearLayout 
    android:orientation="horizontal" > 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="The weather was " /> <!-- Just for short answer, should be put elsewhere --> 
    <EditText 
     android:id="@+id/myEditText" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text=" yesterday." /> <!-- Just for short answer, should be put elsewhere --> 
</LinearLayout> 

之后,在你的代码,你可以设置这样的文字:

// Written here as if it where put in and Activity 
public void setYesterdayWeather(final String text) { 
    runOnUiThread(new Runnable() { 

     @Override 
     public void run() { 
      TextView v = (TextView) findViewById(R.id.myEditText); 
      v.setText(text); 
     } 
    }); 
} 

之后,您可以用听变化TextWatcher和调整EditText的大小,使其始终如此包装其文字:

// On inflation, likely in Activity.onCreate() 
final TextView v = (TextView) findViewById(R.id.myEditText); 
v.addTextChangedListener(new TextWatcher() { 

    [...] 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     float textSize = v.getPaint().measureText(s, start, start + count); 
     // onTextChanged may run on Ui Thread, but if it's not the case, the following statement must be called inside a Runnable posted to the main Looper. 
     v.setWidth(textSize); // Eventually, take some extra space for padding ? 
    } 
}); 
+0

谢谢你,但第二个文本视图包裹自己周围...它在编辑文本后聚成一团。我希望文字环绕整个屏幕。 – Steinerla

+0

每次更改文本时,您需要调整“EditText”的大小。使用“TextWatcher”注册。然后,你可以使用'TextView.getPaint()。measureText'获得新的文本大小。 –

+0

谢谢你,但TextViews的大小正在改变。另外,在你的javascript中,你将编辑文本转换为textview然后设置文本?我希望用户在文本视图中输入文本。但我喜欢textwatcher的想法。我会研究一下。谢谢。 – Steinerla

0

您可以在活动设置:

String chaine ="The weather was"+getIntent().getExtras().getString("your String name")+"yesterday." ; 
     TextView text = (TextView) findViewById(R.id.text); 
text.setText(chaine); 

在XML:

+0

编辑文本在哪里? – Steinerla

+0

如果你想让你使用EditText,用EditText改变textView – user2689294

相关问题