2016-12-11 2 views
1

Я пытаюсь вызвать метод, который определен позже в моем файле Java:Можно вызвать другие методы из java-файла в методе onCreate в Android Studio?

public int moveHorizontal; 
public int moveVertical; 
public RelativeLayout relative1; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    relative1 = (RelativeLayout) findViewById(R.id.relative1); 
    moveHorizontal = width(1f/12f); 
    moveVertical = height(1f/12f); 
} 

...

public int width(float fraction) { 
    float relativeWidth = relative1.getWidth(); 
    return Math.round(fraction*relativeWidth); 
} 

Однако, когда я бегу мое приложение в режиме отладки, я вижу, что moveHorizontal и moveVertical установлены на 0. Я знаю, что метод работает нормально, поскольку я пытался использовать его в остальной части кода, чтобы найти width(1f/12f), и он возвращает 90. Означает ли это, что я не могу назвать метод width внутри метода onCreate? И есть ли способ обойти это?

+2

Вы пробовали отладку? Мне кажется более вероятным, что 'relative1.getWidth()' возвращает неожиданное значение (возможно, оно еще не нарисовано?) – John3136

ответ

3

Означает ли это, что я не могу назвать метод ширины внутри метода onCreate?

Вы можете позвонить по телефону width(). Однако relative1.getWidth() будет 0 в этот момент, поскольку макет еще не измерен и не выложен.

И есть ли способ обойти это?

Прежде всего, посмотрите, есть ли лучшее решение любой проблемы, которую вы пытаетесь решить, что связано с получением размера relative1. Например, ConstraintLayout и LinearLayout поддерживают размер основы, основанный на дроби, без необходимости самостоятельно выполнять вычисления.

Если вы уверены, что вам нужна ширина и высота, wait to try using it until the widgets have been sized.

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