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

                    View tempView = (View) findViewById(R.layout.main);
                    int[] loc = {0,0};
                    tempView.getLocationOnScreen(loc); /// crashes here!

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

Любые предложения ... спасибо! :)


Добавлено: решено

                    int[] loc = new int[2]; 
                    View tempView = (View) findViewById(R.id.LL_whole);
                    tempView.getLocationOnScreen(loc);

                    post( String.valueOf(loc[1]) );

Работает! :)

0
Roger 29 Авг 2011 в 17:32

2 ответа

Лучший ответ

Попробуйте проверить, имеет ли значение tempView значение null. Я подозреваю, что findViewById () не может найти указанный вами идентификатор.

int[] loc = {0,0};
View tempView = (View) findViewById(R.layout.main);
if (tempView != null) {
    tempView.getLocationOnScreen(loc);
} else {
    Log.d("YourComponent", "tempView was null.");
}

В вашем XML у вас есть что-то вроде этого:

<SomeLayout android:id="@+id/myLayout" ... >

    <SomeView android:id="@+id/myView" ... />
    <SomeOtherView android:id="@+id/myOtherView" .../>

</SomeLayout>

Итак, вы хотите сказать:

SomeView v = (SomeView)findViewById(R.id.myView);  

Или возможно:

SomeLayout l = (SomeLayout)findViewById(R.id.myLayout);
1
i_am_jorf 29 Авг 2011 в 13:45

FindViewById (R.layout.main)

Вы должны разместить здесь R.id.something, а не R.layout.something.

1
Jakub Szczygieł 29 Авг 2011 в 13:42