2014-12-26 6 views
0

У меня есть LinearLayout, я установил ширину match_parent. Как я могу сопоставить высоту с шириной, чтобы получить квадратную компоновку?Размер макета макета до высоты

<LinearLayout 
    android:id="@+id/linearLayout" 
    android:orientation="horizontal" 
    android:layout_margin="20dp" 
    android:layout_width="match_parent" 
    android:layout_height="2dp" 
    android:gravity="center" 
    android:background="@drawable/card_layout"> 
</LinearLayout> 
+1

Вы можете попробовать это в действии: 'int width = ll.getWidth(); ll.getLayoutParams(). Height = width; ll.req uestLayout(); ' –

+0

@Chrys Проверьте мой ответ –

ответ

0

ли это программно -

LinearLayout mLinearLayout=(LinearLayout)findViewById(R.id.linearLayout); 
ViewGroup.LayoutParams params = mDialogLayout.getLayoutParams(); 
params.width = mContext.getResources().getDisplayMetrics().widthPixels; 
params.height = mContext.getResources().getDisplayMetrics().widthPixels; 

если вы хотите другой размер -

params.width = 200; 
params.height = 200; 
+0

Это позволит установить ширину и высоту представления на ширину экрана. Но макет может быть установлен на половину ширины экрана. Было бы лучше получить ширину макета и установить его как высоту –

+0

Да. Но вы также можете установить любой размер –

+0

Он может установить любой размер в 'xml' .. –

0

попробовать это:

final LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout); 

     layout.getViewTreeObserver().addOnGlobalLayoutListener(
       new OnGlobalLayoutListener() { 
        @Override 
        public void onGlobalLayout() { 
         LayoutParams params = (LayoutParams) layout 
           .getLayoutParams(); 
         params.height = params.width; 
         layout.setLayoutParams(params); 
         layout.getViewTreeObserver().addOnGlobalLayoutListener(
           null); 
        } 
       }); 
+0

@ Крис вы пробовали мой ответ? –

2

для того чтобы достигнуть этого вам нужно, чтобы получить ширину ваш @+id/linearLayout программно

LinearLayout mLinearLayout=(LinearLayout)findViewById(R.id.linearLayout); 
int screenWidth = mContext.getResources().getDisplayMetrics().widthPixels; 
int screenHeight = mContext.getResources().getDisplayMetrics().widthPixels; 

mLinearLayout.measure(screenWidth, screenHeight); 
int layoutWidth = mLinearLayout.getMeasuredWidth(); 

, а затем установить ширину значения как высоту

ViewGroup.LayoutParams params = mLinearLayout.getLayoutParams(); 
params.height = layoutWidth; 
mLinearLayout.setLayoutParams(params); 

Вы также можете сделать это, как @balaji koduri показало в OnGlobalLayoutListener

0

сделать свой собственный макет с перекрытой onMeasure

@Override 
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, widthMeasureSpec); 
} 
Смежные вопросы