如何使第一个字符比TextView中的其他字符大得多

时间:2013-09-26 14:20:16

标签: android

我想显示一段长文本,如下所示。这是Flipboard的快照。

enter image description here

为了达到这样的效果,我尝试使用2 TextView s。

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="40sp"
        android:text="T" />

    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="76dp"
        android:text="op British supermarket Tesco (LSE: TSCO) (NASDAQOTH: TSCDY.US) is due to announce its half year results on" />

</LinearLayout>

我得到以下结果。

非常接近。但不是我想要的。这是因为第2行和第3行没有对齐到最左边。第二行和第三行的最左侧空格由TextView占用大字体。

enter image description here

我可以使用更好的技术,例如Flipboard中的技术吗?

3 个答案:

答案 0 :(得分:5)

使用单TextViewBufferType.SPANNABLE将解决问题。

final SpannableString spannableString = new SpannableString(title);
int position = 0;
for (int i = 0, ei = title.length(); i < ei; i++) {
    char c = title.charAt(i);
    if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9')) {
        position = i;
        break;
    }
}
spannableString.setSpan(new RelativeSizeSpan(2.0f), position, position + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//titleTextView.setText(spannableString.toString());
titleTextView.setText(spannableString, BufferType.SPANNABLE);

答案 1 :(得分:0)

对我来说,你可能已经使用了3个TextView: 1 - 段落信 2 - 第一和第二行 3 - 文本的其余部分。

答案 2 :(得分:0)

试试这个。

布局XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:orientation="horizontal" >

<TextView
    android:id="@+id/bigChar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="5dp"
    android:gravity="center_vertical"
    android:text="T"
    android:textSize="40sp" />

<TextView
    android:id="@+id/sideText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    android:layout_toRightOf="@id/bigChar"
    android:gravity="center_vertical"
    android:maxLines="2" />


<TextView
    android:id="@+id/spillText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@id/bigChar"
    android:layout_alignParentLeft="false"
    android:layout_below="@id/bigChar"
    android:layout_marginLeft="5dp"
    android:layout_marginTop="-5dp"
    android:gravity="center_vertical" />
</RelativeLayout>

活动类

public class MainActivity extends Activity {
private String inputString = "op British supermarket Tesco (LSE: TSCO) (NASDAQOTH: TSCDY.US) is due to announce its half year results on and this is the extra bit of spill text";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    TextView bigChar = (TextView) findViewById(R.id.bigChar);
    final TextView sideText = (TextView) findViewById(R.id.sideText);
    final TextView spillText = (TextView) findViewById(R.id.spillText);


    ViewTreeObserver vto = sideText.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
           Layout layout = sideText.getLayout();  
           int numOfLines = layout.getLineEnd(2);

           // split the string now
           String spillTextString = inputString.substring(numOfLines, inputString.length());
           spillText.setText(spillTextString);
        }
    });
}
}