2013-09-04 2 views
3

У меня есть TextView в файле макета XML, как это:первые буквы TextView в файле XML Android макет

<TextView 
    android:id="@+id/viewId" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/string_id" /> 

Моя строка определяется так:

<string name="string_id">text</string> 

это возможно чтобы он отображал «Текст» вместо «текст» без кода java?
(и, не меняя самому либо строку)

+5

Нет, это невозможно. Вы можете создать пользовательский TextView, хотя и заглавный текст. – Ahmad

+0

Не могли бы вы проверить мой ответ правильно, если он ответил на ваш вопрос? –

ответ

6

No. Но вы можете создать простое CustomView простирающейся TextView, который переопределяет SetText и заглавную первую букву, как сказал Ахмад, как это и использовать его в верстке XML.

import android.content.Context; 
import android.util.AttributeSet; 
import android.widget.TextView; 

public class CapitalizedTextView extends TextView { 

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

    @Override 
    public void setText(CharSequence text, BufferType type) { 
     if (text.length() > 0) { 
      text = String.valueOf(text.charAt(0)).toUpperCase() + text.subSequence(1, text.length()); 
     } 
     super.setText(text, type); 
    } 
} 
+0

Да, это решение, которое я уже использовал. Мне было интересно, есть ли у кого-нибудь хитроумный хак, чтобы сделать это прямо в xml :) Но я думаю, что это действительно невозможно :( – qwertzguy

+0

Да, это расстраивает экстенты, на которые вы должны пойти, для простых модификаций, но вы не можете ожидайте, что они смогут сделать все просто: P Хотя было бы здорово использовать Java-функции в вашем xml, чтобы вы могли сказать что-то вроде capitalize ('text') и определить как использовать в своем java-коде функцию. –

3

Я использовал Hyrum Hammon «s ответ удалось получить все слова прописными буквами.

public class CapitalizedTextView extends TextView { 

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

    @Override 
    public void setText(CharSequence c, BufferType type) { 

     /* Capitalize All Words */ 
     try { 
      c = String.valueOf(c.charAt(0)).toUpperCase() + c.subSequence(1, c.length()).toString().toLowerCase(); 
      for (int i = 0; i < c.length(); i++) { 
       if (String.valueOf(c.charAt(i)).contains(" ")) { 
        c = c.subSequence(0, i + 1) + String.valueOf(c.charAt(i + 1)).toUpperCase() + c.subSequence(i + 2, c.length()).toString().toLowerCase(); 
       } 
      } 
     } catch (Exception e) { 
      // String did not have more than + 2 characters after space. 
     } 
     super.setText(c, type); 
    } 

} 
0

Попробуйте этот код в деятельности:

String userName = "name"; 
String cap = userName.substring(0, 1).toUpperCase() + userName.substring(1); 

Надеется, что это помогает вам.

Смежные вопросы