Cómo hacer que el primer carácter sea mucho más grande que otro en un TextView

Me gustaría mostrar un párrafo de texto largo como sigue. Esta es la instantánea de Flipboard.

Introduzca aquí la descripción de la imagen

Para lograr este efecto, intenté usar 2 TextView .

 <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> 

Consigo el resultado siguiente.

Muy cerca. Pero no lo que quiero. Esto se debe a que la segunda línea y la tercera línea no se alinean a la izquierda. El espacio más a la izquierda para la segunda línea y tercera línea, está ocupado por el TextView con fuente grande.

Introduzca aquí la descripción de la imagen

¿Hay alguna mejor técnica que pueda usar, como la de Flipboard?

Mediante el uso de un único TextView con BufferType.SPANNABLE resolverá el problema.

 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); 

Para mí probablemente usted tiene uso de 3 TextViews: 1 – Letra de párrafo 2 – primera y segunda línea 3 – resto del texto.

Prueba esto.

Diseño 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> 

Clase de actividad

 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); } }); } } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.