Вы можете получить всю информацию, связанную с отображением, используя класс Display Metrics http://developer.android.com/reference/android/util/DisplayMetrics.html
, который вам потребуется
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
После этого вся необходимая информация будет присутствовать в вашем объекте метрики.
Другой вариант - позвонить
getActivity().getWindowManager().getDefaultDisplay().getWidth()
getActivity().getWindowManager().getDefaultDisplay().getHeight()
.
Во многих случаях, подобных этому, самый простой подход - использовать «захваченную переменную» для передачи состояния между потоками; это означает, что вы можете сохранить логику локализованной:
public void UpdateTestBox(string newText)
{
BeginInvoke((MethodInvoker) delegate {
tb_output.Text = newText;
});
}
Вышеупомянутое особенно полезно, если мы ожидаем, что он будет вызываться в рабочем потоке (так что небольшая проверка точки InvokeRequired
) - обратите внимание, что это безопасно как для пользовательского интерфейса, так и для рабочего потока, и позволяет нам передавать столько или меньше состояния между потоками.
For simple delegates like this you can use the Action
delegate (link to msdn) from the framework.
public void UpdateTestBox(string newText)
{
if (InvokeRequired)
{
BeginInvoke(new Action<string>(UpdateTestBox), new object[] { newText });
return;
}
tb_output.Text = newText;
}
That way you do not need to maintain your own delegate declarations.