2015-02-23 4 views
0

У меня есть FrameLayout, когда я пытаюсь получить его Params так:Получить ширину и высоту макета

ViewGroup.LayoutParams params = cameraPreviewFrameLayout.getLayoutParams(); 
int layoutHeight = params.height; 
int layoutWidth = params.width; 

Здесь, layoutHeight -2 и layoutWidth -1. Это мой XML:

<FrameLayout 
    android:id="@+id/liveActivity_cameraPreviewFrameLayout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true"/> 

Я выполняю это действие из OnCreate, но я пытался с ним через OnStart(), с тем же результатом. Очевидно, что высота и ширина этого макета не являются этими значениями.

Как я могу эффективно получить размер макета?

ответ

1

Возвращаемые значения являются правильными, потому что:

-2 stands for LayoutParams.WRAP_CONENT 
-1 stands for LayoutParams.MATCH_PARENT 

Если вы хотите, чтобы получить точные значения, вам необходимо использовать методы GetHeight и GetWidth. Однако эти методы могут быть использованы только после того, как макет был измерен, поэтому задержать ваш вызов, как это:

cameraPreviewFrameLayout.post(new Runnable() { 
    @Override 
    public void run() { 
     View v = cameraPreviewFrameLayout; 
     Log.e("TAG", v.getWidth() + ":" + v.getHeight()); 
    } 
}); 
1

Правильного способа получения размера макета после или внутри onLayoutChange вызова метода

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final FrameLayout layout = (FrameLayout) findViewById(R.id.liveActivity_cameraPreviewFrameLayout); 
    layout.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { 
     @Override 
     public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { 
      int width = right - left; 
      int height = bottom - top; 
      Log.v("TAG", String.format("%d - %d", width, height)); 
      //Or 
      Log.v("TAG", String.format("%d - %d", layout.getWidth(), layout.getHeight())); 
      //And after this method call, calling layout.getWidth() and layout.getHeight() will give right values 
     } 
    }); 
} 
+0

Это хорошо работает , – svprdga

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