setGravity не работает - PullRequest
       3

setGravity не работает

1 голос
/ 20 декабря 2011

Пожалуйста, смотрите мой код ниже.Я не могу заставить 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);
                }

            }
        });
    }
}

Ответы [ 12 ]

3 голосов
/ 22 декабря 2011

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

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

Если вы уверены в вышесказанном, видите ли вы журнал, в котором написано «Я под левым» (а не «Проверить»)? Если нет, то это как-то не доходит ..

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

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

1 голос
/ 20 декабря 2011

Я думаю, что мы не можем изменить интерфейс таким образом. Я обычно так делаю.

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

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

Надеюсь, это работает! Линх

0 голосов
/ 29 ноября 2016

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

0 голосов
/ 29 мая 2014

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

0 голосов
/ 23 февраля 2013

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

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

до

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

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

0 голосов
/ 27 декабря 2011

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

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

check.equalsIgnoreCase("left")

вместо:

check.contentEquals("left")

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

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

0 голосов
/ 23 декабря 2011

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

<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 голосов
/ 23 декабря 2011

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

publicvoid invalidate ()

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

0 голосов
/ 22 декабря 2011

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

check.equalsIgnoreCase("left")

Надеюсь, это решит вашу проблему.

0 голосов
/ 22 декабря 2011

Вы пытались вызвать недействительным после изменения атрибута макета вашего текстового представления?

Документация Android - View.invalidate ()

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