Мне нужно получить координаты моего приложения на экране, чтобы использовать их в качестве смещения для всплывающего окна.
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]) );
Работает! :)
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);
FindViewById (R.layout.main)
Вы должны разместить здесь R.id.something, а не R.layout.something.
Похожие вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].