2013-10-13 6 views
0

У меня есть вид, содержащий два Button s и TextView. Они оседают, используя RelativeLayout, как показано ниже:Как я могу обеспечить, чтобы кнопки Android имели одинаковую высоту, когда они находятся в разных макетах

    +-----------+ 
__TextView___  | Button 1 | 
        +-----------+ 
+-----------+ 
| Button 2 | 
+-----------+ 

Ключевым моментом здесь является то, что TextView и кнопка 1 имеют одинаковые высоты, в жизнь layout_alignTop и layout_alignBottom на кнопку 1

Кнопка 2 сдерживается, чтобы иметь той же ширины, что и TextView (с использованием layout_alignLeft и layout_alignRight).

Проблема заключается в том, что я хочу, чтобы иметь такую ​​же высоту, как и кнопки 1, используя что-то вроде:

layout_height="@id/button_1" 

Могу ли я добиться этого полностью за счет использования макетах?

Если нет, есть ли какой-то код, который я мог бы развернуть в Управлении, которое использует представление, чтобы заставить это сообщение, но перед отображением?

Мне бы очень хотелось избежать создания специального View для достижения этого.

На земле iOS я могу указать, что различные элементы управления имеют одинаковую высоту или ширину, но я не вижу способа сделать это в Android.

+0

если вы используете Android: layout_height = «wrap_content» и андроид: TextSize = 10sp или же размер шрифта для обеих кнопок я думаю, вы можете иметь такую ​​же высоту ваши кнопки –

+0

@MaulikSheth Это правда, но я хочу, чтобы явным образом не задавал размер, и я хочу, чтобы размер был связан с входом. EditText –

+0

Используйте независимые от устройства пиксели (провалы) для измерения. Система будет обеспечивать одинаковый размер на разных устройствах и плотности. – Kuffs

ответ

0

Попробуйте сделать это в вашей деятельности OnCreate метод

Button button1 = (Button) findViewById(R.id.button_1); 
Button button2 = (Button) findViewById(R.id.button_2); 
RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.relativeLayout); 
relativeLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 

    @Override 
    public void onGlobalLayout() { 
     relativeLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this); 

     RelativeLayout.LayoutParams btParams = (RelativeLayout.LayoutParams) button2.getLayoutParams(); 
     int height = button1.getHeight(); 
     btParams.height = height; 
     button2.setLayoutParams(btParams); 
    } 
}); 
+0

И ваше редактирование просто избили мой комментарий :) –

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