2012-04-14 1 views
6

Я застрял в проблеме, и я не знаю, что ее вызывает. У меня есть очень простой макет, как это:TextView setGravity() не работает в java

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical"> 
<TextView 
    android:id="@+id/my_text_view" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_gravity="NOTE_THIS" 
    android:textColor="#FFFFFF" 
    android:textSize="22dp" 
    android:text="TestText"/> 
</LinearLayout> 

, который входит в другую раскладку. Если я изменю гравитацию внутри xml, я вижу тот же результат в редакторе макетов и на моем телефоне. Если я хочу применить Gravity программно, как с myTextView.setGravity(Gravity.CENTER), это ничего не изменит. И я не могу установить LayoutGravity в Java на TextView

Я попытаюсь в целях отладки включить их три раза каждый с другой серьезностью, которая работает даже. Поэтому я предполагаю, что все в порядке с моим макетом, и должен быть Bug или что-то еще, что я пропустил. Может кто-нибудь дать мне подсказку, что я также могу попробовать, или что вызывает эту проблему?

ответ

24

Установите ширину вашего TextView как android:layout_width="fill_parent" то вы можете установить его программно с помощью myTextView.setGravity(Gravity.CENTER)

+0

как я могу получить IntrinsicWidth TextView после предоставления ему «fill_parent», потому что getWidth дает мне ширину родительского LienearLayout –

+0

, зачем вам это нужно? для установки только силы тяжести? – waqaslam

+0

, потому что он не устанавливает гравитацию только, но обрабатывает текст, который работает, если я получаю правильную его ширину. –

1

При использовании LinearLayout в качестве родителя, то layout_gravity приходит в картине, выравнивать контроль, но не содержание внутри элемента управления так, используя вместо android:layout_gravity использовать android:gravity.

+0

Ах жаль, что это была моя вина ... Я хочу установить LayoutGravity, потому что Gravity ничего не делает ... обновил мой вопрос –

5

Вы должны установить степень тяжести LayoutParams объекта вместо самого Вид:

TextView tv = new TextView(getApplicationContext()); 
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT); 
lp.gravity = Gravity.CENTER; 
tv.setLayoutParams(lp); 
Смежные вопросы