Изменить макет текста, созданного в Java [Android] - PullRequest
1 голос
/ 13 марта 2010

Хорошо, правильно, я спросил, как создать случайное число от 1 до 100 для Android, и я пришел к этому

    TextView tv = new TextView(this);

    int random = (int)Math.ceil(Math.random()*101); 

    tv.setText("Your Number Is..."+ random );

То, что это делает, это создает по умолчанию своего рода текстовое представление в стиле "привет, мир" и говорит: "Ваше число есть .... [Затем случайное число]

Моя проблема в том, что я не могу изменить макет этого текста, потому что он не определен в XML, если кто-то может сказать мне, как изменить стиль, или, например, превратить случайное число в строку, чтобы я мог использовать его для любой макет Textview, который был бы великолепен ..

Спасибо:)

Ответы [ 5 ]

2 голосов
/ 23 марта 2010
tv.setText(Html.fromHtml("Your number is: <b>" + random + "</b>"));

Для базовых тегов стиля текста HTML.

2 голосов
/ 13 марта 2010
  • Если под change the style вы подразумеваете цвет текста, размер текста и хотите изменить их программно, обратите внимание на методы setTextColor и setTextSize

Подробнее здесь

  • Если вы хотите, чтобы более сложное форматирование устанавливалось программно, см. ссылка .

В следующем примере показано, как сделать текст жирным и курсивом.

tv.setText("Your Number Is..."+ random, TextView.BufferType.SPANNABLE );
Spannable myText = (Spannable) tv.getText();
myText.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC),0,myText.length(),0);

Редактировать : Попробуйте ниже для android:textSize="100dp" и android:gravity="center":

tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 100);
tv.setGravity(Gravity.CENTER);
2 голосов
/ 13 марта 2010

Поместить его в строку очень просто.

String randomAsAString = Integer.toString(random)

Затем вы можете использовать свойства XML TextView для изменения его форматирования, например, android: textSize = "30dp" или android: textColor = "# 900".

Кстати, если вы удовлетворены ответом на предыдущий вопрос, вы должны вернуться и пометить ответ как «Принят». Это дает очки «репутации» человеку, ответ которого вы приняли, и закрывает вопрос, чтобы люди не думали, что вы все еще ждете лучшего ответа. Подробнее о репутации вы можете прочитать в FAQ.


Edit: Вы не можете ссылаться на строку целиком в xml, оставляя при этом случайное число. Это связано с тем, что формат «@ string / some_string» допускает только неизменяемые строки. Исключением является использование параметров, например, установив строку как

<string name="random_number">The random number is %d</string>

Тогда вы можете вызвать эту строку, используя что-то вроде

yourTextView.setText(this.getString(R.string.random_number, random))

Что касается вашего другого вопроса об установке фона для textView, это также просто.

yourTextView.setBackgroundDrawable(R.drawable.....)

Вам следует воспользоваться функцией автозаполнения Eclipse ... это значительно упрощает поиск этих команд. Например, просто введите имя вашего TextView, а затем точку, подождите полсекунды для появления списка опций, затем «setB», и он должен затем отфильтровать список по трем параметрам setBackground Drawable / Resource / Color.

1 голос
/ 14 марта 2010

Вы также можете сделать что-то вроде этого.

Определите вашу строку в strings.xml как:

<string name="your_number_is">Your number is <xliff:g id="number">%s</xliff:g>.</string>

Создание TextView в макете xml:

<TextView android:id="@+id/your_number_is"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:text="@string/your_number_is"
    android:gravity="center"
    android:textSize="100dip"
    />

Тогда ваш код будет выглядеть так:

TextView tv = (TextView) findViewById(R.id.your_number_is);
int random = (int)Math.ceil(Math.random()*101);
tv.setText(getString(R.string.your_number_is, random));

Это облегчит задачу, когда вы позже захотите изменить текст или, возможно, локализовать свое приложение.

0 голосов
/ 07 мая 2010

если у вас проблемы с этим, используйте это:

new Thread(){ 
      public void run(){ 
            TextView v = (TextView)findViewById(R.id.mytext); 
            v.setText("TEST"); 
      } 
    }.start();
...