2014-03-04 24 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

相關問題