2012-03-02 5 views
2

私は自分のアクティビティで膨らませたTextViewを持っています。このTextViewにテキストを設定すると、コンテンツが複数行にまたがって表示されます。デフォルトの動作です。 例えばrunOnUiThreadにテキストを設定すると、TextViewはsingleLineになります

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.location_details); 

     // inflate the view 
     descriptionTextView = (TextView)findViewById(R.id.descriptionTextView); 
     descriptionTextView.setText("This is a long text that should be multilined"); 
     .... 
    } 

私はrunOnUiThreadにRunnableを内側に同じテキストを使用する場合、テキストはデフォルトでは、単一の行になります。私はmultilinedすることがsetSingleLine(false)を呼び出す必要があります... 例えば

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.location_details); 

     // inflate the view 
     descriptionTextView = (TextView)findViewById(R.id.descriptionTextView); 

     new Thread(new Runnable(){ 
      public void run() { 
      ... 
      runOnUiThread(new Runnable(){ 
      @Override 
      public void run() { 
       descriptionTextView.setText("This is a long text that should be multilined"); 
      } 
      }); 
      }); 
    } 

ですが、なぜでしょうか?

EDIT マイレイアウトファイルは、このようなものです:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" 
android:padding="6dp" 
android:gravity="center|top" 
android:background="@drawable/background"> 

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="0dip" 
    android:layout_weight="1" 
    android:background="@drawable/bg_dashboard" 
    android:gravity="center|top" 
    android:orientation="vertical" 
    android:padding="10dp" > 

    <ScrollView 
     android:id="@+id/scrollView1" 
     android:layout_width="fill_parent" 
     android:layout_height="0dip" 
     android:layout_gravity="center" 
     android:layout_weight="1"> 

     <LinearLayout 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:background="#ffffff" 
      android:gravity="top" 
      android:orientation="vertical" > 

      <TextView 
       android:id="@+id/titleTextView" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center" 
       android:textStyle="bold" 
       android:textColor="#565A5D" 
       android:paddingTop="4dp" 
       android:paddingBottom="4dp" 
       android:paddingLeft="15dp" 
       android:paddingRight="15dp" 
       android:textSize="24sp" /> 

      <ImageView 
       xmlns:android="http://schemas.android.com/apk/res/android" 
       android:src="@drawable/divider" 
       android:contentDescription="@string/metaDivider" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:scaleType="fitXY" 
       android:paddingBottom="4dp" 
       android:paddingTop="4dp" /> 

      <ImageView 
       android:id="@+id/photoImageView" 
       android:layout_width="fill_parent" 
       android:adjustViewBounds="true" 
       android:layout_height="160dp" 
       android:padding="5dp" 
       android:src="@null" 
       android:contentDescription="@string/metaArticleImage" /> 

      <ImageView 
       xmlns:android="http://schemas.android.com/apk/res/android" 
       android:id="@+id/imageDivider" 
       android:src="@drawable/divider" 
       android:contentDescription="@string/metaDivider" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:scaleType="fitXY" 
       android:paddingBottom="4dp" 
       android:paddingTop="4dp" /> 

      <TextView 
       android:id="@+id/descriptionTextView" 
       android:layout_width="fill_parent" 
       android:layout_height="0dp" 
       android:layout_gravity="center" 
       android:textColor="#55595C" 
       android:layout_weight="1" 
       android:paddingTop="5dp" 
       android:paddingBottom="5dp" 
       android:paddingLeft="15dp" 
       android:paddingRight="15dp"/> 

      <Button 
       android:id="@+id/mapButton" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:text="@string/mapBtn" 
       android:layout_marginTop="5dp" 
       android:layout_marginBottom="5dp" 
       android:layout_marginLeft="15dp" 
       android:layout_marginRight="15dp" 
       android:layout_gravity="center" /> 

     </LinearLayout>  

    </ScrollView> 

</LinearLayout> 

<ImageView 
    android:contentDescription="@string/metaLogo" 
    android:layout_gravity="right" 
    android:layout_marginRight="15dp" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/logo" /> 

答えて

0

AsyncTaskを使用することができると思います。違いが見られるのは、ある場合(onCreate()から直接呼び出される)、の前にと設定されているため、ビューがレイアウトされているため、TextViewの高さは内容の内容と一致するように設定されています。 2番目のケース(Thread)では、のレイアウトが完了した後にテキストがに設定され、に明示的に指示がない限り、TextViewは新しいコンテンツに合わせてサイズを調整しません。

layout_height属性をdescriptionTextViewに設定した場合、wrap_contentになると、サイズ変更の問題が解決されます。

HTH

+0

ありがとう、それは働いた!私は0dpとwrap_contentはまったく同じだと思った。eclipseは0dpに変更するようにアドバイスした。 "より良いパフォーマンスのためにwrap_contentの代わりに0dipのlayout_heightを使う" – antoniom

+1

Eclipseには、layout_weightパラメータがビューに適用されているので、あなたの目標は、テキストの内容をラップしてビューを表示することなので、 'layout_weight'が本当に必要かどうかはわかりません。 – Devunwired

0

あなたはあなたの全体のレイアウトを貼り付けた場合、我々はいくつかのより多くのデバッグを行うために試みることができます。 TextView.setText()は、親コンテナへの通知を終了し、明らかに、これは呼び出された時によって動作が異なります。

はところで、あなたのコードを見て、私はあなたの代わりに、それはあなたのレイアウト制約に関係しているほとんどの場合、外側スレッド

+0

私は自分の質問を編集し、レイアウトを含めました。あなたが何かを見ることができるといいですね。 – antoniom

関連する問題