2013-05-15 7 views
6

私はプログラムでmaxLinesを設定してからandroid:ellipsize = "end"に設定しているというテキストビューを持っています。これは部分的に機能しますが、何らかの理由で切り捨てられているテキストが4.2.2の省略記号の後に数文字続けられます。新しい文字ではなく実際のテキストが切り捨てられています。android:省略記号の後ろにICSテキストの楕円が続きます

改行または "\ n"が付いたセクションごとに省略記号が追加されているため、2.3.6では正しく機能しません。

私はカスタムフォントを使用していませんが、これまでに問題が発生していることがわかりました。ここで

final TextView reviewView = (TextView) view.findViewById(R.id.textViewPosition3); 

ViewTreeObserver observer = reviewView.getViewTreeObserver(); 
observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
     int maxLines = (int) reviewView.getHeight()/reviewView.getLineHeight(); 
     reviewView.setMaxLines(maxLines); 
     reviewView.setEllipsize(TruncateAt.END); 
     reviewView.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
     //reviewView.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
    } 
}); 

は私のxmlです::私はMAXLINESを計算し、設定するのはここ

がある

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


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/fragmentTestLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 


    <ImageView 
     android:id="@+id/restaurantImage" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:adjustViewBounds="true" 
     android:src="@drawable/test" 
     android:layout_marginTop="-10dp" 
     android:layout_marginRight="20dp" 
     android:layout_marginLeft="20dp" 
     />  

    <ImageView 
     android:id="@+id/squareBlack" 
     android:layout_alignRight="@id/restaurantImage" 
     android:layout_alignTop="@id/restaurantImage" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/square_black_small" 
     /> 

    <TextView 
     android:id="@+id/textViewPosition" 
     android:layout_alignRight="@id/squareBlack" 
     android:layout_alignLeft="@id/squareBlack" 
     android:layout_alignBottom="@id/squareBlack" 
     android:layout_alignTop="@id/squareBlack" 
     android:layout_margin="1dp" 
     android:gravity="center" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="This is a test" 
     android:textSize="25sp" 
     android:textColor="#a6cbff" 
     android:textStyle="bold" 
     /> 

    <ImageView 
     android:id="@+id/squareBlue" 
     android:layout_toLeftOf="@id/squareBlack" 
     android:layout_alignTop="@id/squareBlack" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/square_blue_small" 
     /> 

    <TextView 
     android:id="@+id/textViewPosition1" 
     android:layout_alignRight="@id/squareBlue" 
     android:layout_alignLeft="@id/squareBlue" 
     android:layout_alignBottom="@id/squareBlue" 
     android:layout_alignTop="@id/squareBlue" 
     android:layout_margin="1dp" 
     android:gravity="center" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="7.5" 
     android:textSize="25sp" 
     android:textColor="#902515" 
     android:textStyle="bold" 
     /> 

    <TextView 
     android:id="@+id/restaurantName" 
     android:layout_alignLeft="@id/restaurantImage" 
     android:layout_alignBottom="@id/restaurantImage" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Restaurant Name" 
     android:textSize="25sp" 
     android:textColor="#fff" 
     android:textStyle="bold" 
     android:background="@drawable/greybar" 
     /> 

    <TextView 
     android:id="@+id/textViewPosition2" 
     android:layout_below="@id/restaurantImage" 
     android:layout_centerHorizontal="true" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="February 15, 2013" 
     android:textColor="#555" 
     android:textStyle="bold" 
     android:textSize="15sp" 
     /> 

     <Button android:id="@+id/readReview" 
     android:background="@drawable/readreview" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:text="Read the Review" 
     android:textColor="#fff" 
     android:textColorHighlight="#ccc" 
     android:textSize="15sp" 
     android:textStyle="bold" 
     android:layout_centerHorizontal="true" 
     /> 

     <TextView 
     android:id="@+id/textViewPosition3" 
     android:layout_below="@id/textViewPosition2" 
     android:layout_above="@id/readReview" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="15sp" 
     android:textColorLink="#C90404" 
     android:layout_marginRight="15dp" 
     android:layout_marginLeft="15dp" 
     android:textColor="#000" 
     /> 



</RelativeLayout> 

答えて

2

XMLでこれを置きます私はそれがより多くのハックのように感じるので、それが最善の解決策であるとは確信していません。しかし、それは動作しているようだ。

 ViewTreeObserver observer = reviewView.getViewTreeObserver(); 
     observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      int maxLines = (int) reviewView.getHeight()/reviewView.getLineHeight(); 

      reviewView.getViewTreeObserver().removeGlobalOnLayoutListener(this); 


      if(reviewView.getLineCount() > maxLines) 
      { 
       int lineEndIndex = reviewView.getLayout().getLineEnd(maxLines - 1); 
       String text = reviewView.getText().subSequence(0, lineEndIndex-3) +" ..."; 
       reviewView.setText(text); 
      } 
     } 
    }); 
+0

問題を解決するようです。親切にありがとう。 – Garcon

0

私はプログラム的にこれを解決しますが、

android:singleLine="true" 
    android:ellipsize="end"    
    android:maxLines="1" 
+0

スクリーンサイズに応じて画面のスペースを動的に埋め込む複数行のテキストビューが必要なので、これは機能しません。なぜ私はmaxLinesをプログラム的に設定しようとしているのですか? – user2110291

関連する問題