2011-12-19 1 views
1

См. Мой код ниже. Я не могу сделать работу SetGravity.setGravity не работает

Почему?

Компоновка Код:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:padding="25dp" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:longClickable="true" 
    android:orientation="vertical" > 

    <EditText 
     android:id="@+id/etCommands" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:hint="Type a command" 
     android:password="true" /> 


    <LinearLayout 
     android:weightSum="100" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 

    <Button 
     android:layout_weight="20" 
     android:id="@+id/btnResults" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Results" /> 

    <ToggleButton 
     android:paddingBottom="10dp" 
     android:layout_weight="80" 
     android:id="@+id/passTog" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="ToggleButton" android:checked="true"/> 

    </LinearLayout> 

    <TextView 
     android:id="@+id/tvResults" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:text="invalid" /> 

</LinearLayout> 

код Java:

public class TextPlay extends Activity { 

    private static final String TAG = "MyApp"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.text); 

     Button chkCmd = (Button) findViewById(R.id.btnResults); 
     final ToggleButton passTog = (ToggleButton) findViewById(R.id.passTog); 
     final EditText input = (EditText) findViewById(R.id.etCommands); 
     final TextView display = (TextView) findViewById(R.id.tvResults); 

     passTog.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       // TODO Auto-generated method stub 

       if (passTog.isChecked()) { 

        input.setInputType(InputType.TYPE_CLASS_TEXT 
          | InputType.TYPE_TEXT_VARIATION_PASSWORD); 

       } else { 

        input.setInputType(InputType.TYPE_CLASS_TEXT); 

       } 

      } 
     }); 

     chkCmd.setOnClickListener(new View.OnClickListener() { 

       @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       String check = input.getText().toString(); 

       Log.i(TAG, "Check Value is: " + check); 

       if (check.contentEquals("left")) { 
        Log.i(TAG, "I am under left "); 
        display.setGravity(Gravity.LEFT); //WHYW ILL YOU NOT WORK SETGRAVITY????????????? 
       } else if (check.contentEquals("center")) { 
        display.setGravity(Gravity.CENTER); 

       } else if (check.contentEquals("right")) { 
        display.setGravity(Gravity.RIGHT); 
       } 

       else if (check.contentEquals("blue")) { 
        display.setGravity(Gravity.RIGHT); 
       } 

      } 
     }); 
    } 
} 
+1

Что не работает? –

+0

tvРезультаты не выравниваются влево или вправо после того, как пользователь нажимает кнопку, даже если я вижу сообщение журнала. – jini

+0

Вы пытались использовать 'invalidate()' для представления? Если событие срабатывает, может быть, View просто не знает, чтобы перерисовать себя? –

ответ

3

Я только что протестировал и это сработает. Возможно, вы ошиблись в некоторых вещах;

Прежде всего, когда вы вводите «влево» в текстовое поле, вы убедитесь, что вы не набирали «Left» (большинство клавиатур заглавной буквы)

Если вы уверены, что о выше, вы видите журнал, в котором говорится: «Я под левым» (не «проверка»)? Если нет, то он не получает там как-то ..

Если вы действительно видите, вы можете очистить/построить свой проект (в Eclipse, Проект-> Clean -это делает очистку и повторное строительство)

Если это не сработает, вы можете изменить свою целевую сборку (измените ее на уровень API 10 или около того). Вам не нужно беспокоиться о сборке целей, если вы просто используете это как упражнение для изучения ,

+0

Я пробовал все, что вы упоминали, включая материал для сборки цели, и он по-прежнему не выравнивает текст влево. Это касается меня, поскольку один и тот же код ведет себя по-разному с разными машинами. – jini

+0

Я тоже вижу «Я под левым» – jini

+0

Что вы используете? Эмулятор (если так, какая ОС) или устройство (какая модель и ОС)? –

0

Попробуйте установить layout_gravity="center" и layout_width="wrap_ontent" возможно, что будет делать это :)

1

Я думаю, что мы не в состоянии изменить UI таким образом. Обычно я так люблю.

TableLayout table1 = (TableLayout) findViewById(R.id.table1); 
txtresult.setGravity(Gravity.RIGHT); 
((TableLayout) table1).addView(txtresult); 

Это работает со мной. Поэтому я предлагаю вам сделать трюк, например удалить TextView «display» и создать новый с новыми свойствами Gravity.

Надеюсь, что это сработает! Linh

0

комплект layout_width="wrap_content" и установите масштаб гравитации.

+1

Это ничего не делало. Просто выровняйте текст влево, а не в центре, как раньше. – jini

0

Изменить условия, как показано ниже:

check.equalsIgnoreCase("left") 

Надежда это решает проблему ур.

0

View.invalidate() должен быть задействован в потоке пользовательского интерфейса. Если вы делаете вид перенастройку в Слушатель обратного вызова, который ваш случай, то вам, вероятно, нужно позвонить View.postInvalidate(), проверьте API:

общественности недействительным Invalidate()

С : API Уровень 1
Недействительный весь вид. Если вид виден, в будущем будет вызываться onDraw (android.graphics.Canvas). Это должно вызываться из потока пользовательского интерфейса. Для вызова из потока, отличного от UI, вызовите postInvalidate().

0

Попробуйте это:

<LinearLayout 
    android:id="@+id/llResults" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center"> 

<TextView 
    android:id="@+id/tvResults" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="invalid" /> 

</LinearLayout> 

Вместо того чтобы делать: - tvResults.setGravity попробуйте установить серьезность LinearLayout: - llResults.setGravity

0

ваш код хорошо работает для меня, i've испытания на реальном устройстве с Android 4.0.3 (Nexus S), единственное, что может беспокоить вас заглавными буквами, как @Tolga E сказал.

вы можете попробовать:

check.equalsIgnoreCase("left")

вместо:

check.contentEquals("left")

и отладки, поставить точку останова на if's, чтобы проверить, что ваш код на самом деле пытается изменить гравитация или ее пропуская эту линию.

Надеюсь, это поможет.

0

Если кто-то, кто следит за учебником thenewboston, наткнулся на это с той же проблемой, это проблема с отображаемой переменной. Просто измените

final TextView display = (TextView) findViewById(R.id.tvDisplay); 

в

final TextView display = (TextView) findViewById(R.id.tvResults); 

с другими объявлениями переменных.

0

Я думаю, что метод setGravity был обесценен из API 4.0. Я не вижу альтернативы. Осталось только использовать API уровня 8.0. Я также получаю исключение nulpointer в log cat с помощью метода setGravity

0

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

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