2013-07-02 53 views
1

我是Android中的諾布,我希望在文本中按順序放置一個文本,字符之間已知時間,從EditText中的書寫文本開始如何從一個ArrayList中逐個字符地設置一個TextView

這就是我所做的解決方案:我寫了兩個ArrayList,它們是從EditText中收取的,第一個是EditText中的字符,第二個是整數,用於確定字符之間的時間。 然後我解析ArrayLists,時間整數次加載順序完成,但不是字符,只有當循環結束時才繪製TextView。

我的代碼 在MainActivity:

import java.util.ArrayList; 
import android.os.Bundle; 
import android.app.Activity; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

public class MainActivity extends Activity { 

private TextView showCharacter; 
private TextView showAppendCharacter; 
private EditText incomingText; 
private Button readTextEdit; 

private ArrayList<CharSequence> toText = new ArrayList<CharSequence>(); 
private ArrayList<Integer> timePlay = new ArrayList<Integer>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    showCharacter = (TextView) findViewById(R.id.showCharacterTextView); 
    showAppendCharacter = (TextView) findViewById(R.id.showAppendCharacterTextView); 
    incomingText = (EditText) findViewById(R.id.incomingEditText); 
    readTextEdit = (Button) findViewById(R.id.readTextButton); 

    readTextEdit.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      toText.clear(); 
      timePlay.clear(); 
      showAppendCharacter.setText(""); 

      String text = incomingText.getText().toString(); 
      for (int base = 0; base < text.length(); base++) { 
       if (String.valueOf(text.charAt(base)).equals("a")) { 
        toText.add(("a")); 
        timePlay.add(500); 
       } else if (String.valueOf(text.charAt(base)).equals("b")) { 
        toText.add(("b")); 
        timePlay.add(650); 
       } else if (String.valueOf(text.charAt(base)).equals("c")) { 
        toText.add(("c")); 
        timePlay.add(800); 
       } else { 
        toText.add(("_")); 
        timePlay.add(1000); 
       } 
      } 

      for (int pos = 0; pos < toText.size(); pos++) { 
       try { 
        Thread.sleep(timePlay.get(pos)); 
        showCharacter.setText((String) toText.get(pos)); 
        showAppendCharacter.append((String) toText.get(pos)); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    }); 
} 
} 

的activity_main.xml中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/LinearLayout1" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
tools:context=".MainActivity" > 

<TextView 
    android:id="@+id/showCharacterTextView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/showCharacterTextView" 
    android:textAppearance="?android:attr/textAppearanceLarge" /> 

<TextView 
    android:id="@+id/showAppendCharacterTextView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/showAppendCharactersTextView" 
    android:textAppearance="?android:attr/textAppearanceLarge" /> 

<EditText 
    android:id="@+id/incomingEditText" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:ems="10" 
    android:hint="@string/incomingTextEditText" 
    android:inputType="text" > 

    <requestFocus /> 
</EditText> 

<Button 
    android:id="@+id/readTextButton" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/readButton" /> 

的strings.xml中:

<?xml version="1.0" encoding="utf-8"?> 

<string name="app_name">texto Desde ArrayList</string> 
<string name="action_settings">Settings</string> 
<string name="showCharacterTextView">Show last Character</string> 
<string name="showAppendCharactersTextView">Show append Characters</string> 
<string name="incomingTextEditText">Incoming text</string> 
<string name="readButton">Read text</string> 

任何建議?? 我會很感激任何想法。

回答

0

嘗試類似這樣的...你可以擺脫Arraylists。記住一個字符串基本上是一個字符數組。創建一個實現可運行的自定義文本視圖,以便您嘗試處理文本的工作不在主線程中完成。

package com.example.stackquestion; 

import java.util.ArrayList; 

import android.content.Context; 
import android.graphics.Color; 
import android.os.SystemClock; 
import android.util.AttributeSet; 
import android.widget.TextView; 

public class CustomTextView extends TextView implements Runnable { 
    String text  = null; 
    int  i   = 0; 
    int  length  = 0; 
    String currentText = ""; 

    public CustomTextView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     reset(); 
    } 

    @Override 
    public void run() { 

     if (i < length) { 
      currentText = currentText + text.charAt(i); 
      setText(currentText); 
      if (text.charAt(i) == 'a') { 
       postDelayed(this, 500); 
      } else if (text.charAt(i) == 'b') { 
       postDelayed(this, 650); 
      } else if (text.charAt(i) == 'c') { 
       postDelayed(this, 800); 
      } else if (text.charAt(i) == '_') { 
       postDelayed(this, 1000); 
      } else 
       postDelayed(this, 1); 
      i++; 
     } 
    } 

    public void setString(String text) { 
     this.text = text; 
     this.length = text.length(); 
    } 

    public void reset() { 
     currentText = ""; 
     text = null; 
     i = 0; 
     setText(""); 
    } 
} 

這裏是主活動

package com.example.stackquestion; 

import java.util.ArrayList; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

public class MainActivity extends Activity { 

    private TextView    showCharacter; 
    private CustomTextView   showAppendCharacter; 
    private EditText    incomingText; 
    private Button     readTextEdit; 

    private ArrayList<CharSequence> toText  = new ArrayList<CharSequence>(); 
    private ArrayList<Integer>  timePlay = new ArrayList<Integer>(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     showCharacter = (TextView) findViewById(R.id.showCharacterTextView); 
     showAppendCharacter = (CustomTextView) findViewById(R.id.showAppendCharacterTextView); 
     incomingText = (EditText) findViewById(R.id.incomingEditText); 
     readTextEdit = (Button) findViewById(R.id.readTextButton); 

     readTextEdit.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       if (v.getId() == R.id.readTextButton) 
        showAppendCharacter.reset(); 
       showAppendCharacter 
         .setString(incomingText.getText().toString()); 
       showAppendCharacter.run(); 
      } 
     }); 
    } 
} 

woops。我忘了給你佈局。但看起來你知道了。只需將textview的類型更改爲完全限定的CustomTextView即可。這是我的。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context=".MainActivity" > 

    <TextView 
     android:id="@+id/showCharacterTextView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/showCharacterTextView" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <com.example.stackquestion.CustomTextView 
     android:id="@+id/showAppendCharacterTextView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/showAppendCharactersTextView" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <EditText 
     android:id="@+id/incomingEditText" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:ems="10" 
     android:hint="@string/incomingTextEditText" 
     android:inputType="text" > 

     <requestFocus /> 
    </EditText> 

    <Button 
     android:id="@+id/readTextButton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/readButton" /> 

</LinearLayout> 

編碼快樂:)

+0

太棒了!工作中!謝謝!在開始時我有一個錯誤java.lang.ClassCastException:android.widget.TextView不能轉換爲com.prueba.textodesdearraylist.CustomTextView,然後我改變了佈局xml Rafix

相關問題