2013-06-24 8 views
0

Как выравнивать текст кнопки при изменении положения кнопки onLayout? У меня есть график, который имеет много горизонтальных осей. Каждая ось имеет три кнопки, расположенных в следующем порядке: enter image description hereВыровнять текст кнопки после повторной установки кнопки onLayout в Android

Теперь я должен переставить так, чтобы все кнопки на графике были правильно расположены и размещены там, где мне нужно. Все отлично работает, за исключением выравнивания текста синей кнопки. Если я скажу, что гравитация в центре, она принимает высоту как совмещенную высоту синих и красных кнопок и помещает текст наполовину за красную кнопку. Если не сказать ничего на черной области, где у нас есть только голубая стрелка на левом конце кнопки, но я хочу, чтобы текст находился на синей области с гравитационным дном и центровым горизонтальным. Интересная вещь - мое гравитационное дно, а центральная горизонтальная работа отлично подходит для планшетов.

Вот мой OnLayout код:

protected void onLayout(boolean changed, int l, int t, int r, int b) { 
    super.onLayout(changed, l, t, r, b); 


    //this.strikeButton.layout(left,top,right,bottom); 
    int height = this.getMeasuredHeight(); 
    int width = this.getMeasuredWidth(); 
    int buttonWidth = this.upArrowButton.getMeasuredWidth(); 
    int buttonHeight = (2*height)/5; 
    int right = width - buttonWidth; 

    int left = 0; 
    int top = height/2; 
    top -= buttonHeight/2; 

    int bottom = top + buttonHeight; 
    this.strikePriceButton.layout(left, top, right, bottom); 
    this.upArrowButton.layout(left, 0, right, height/2); 
    this.downArrowButton.layout(left, height/2, right, height); 
    this.upArrowButton.setGravity(Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL); 
    this.downArrowButton.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL); 
    this.strikePriceButton.setGravity(Gravity.CENTER); 
    } 

Вот мой OnMeasure Функция:

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    this.setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), App.isTablet(context) ? 96 : 128); 
} 

Я попытался использовать ту же высоту для планшета и телефона не хорошо выглядеть на одной из них, так что я пришлось использовать разные высоты.

ответ

0

Просто нужно было использовать dp вместо использования значений высоты и ширины.