В моем обзоре утилит с помощью GridLayoutManager у меня есть VideoViews, которые имеют 2 столбца в портретной и 4 столбца в альбомной ориентации. Я хочу изменить размер VideoView в зависимости от размера экрана, поэтому в портретной ориентации я получаю ширину экрана, деленную на 2, затем устанавливаю его как ширину и высоту VideoView, а в альбомной ориентации ширину делим на 4, затем устанавливаем его на высоту и ширина VideoView. То, как я это делаю, теперь расширяет VideoView и переопределяет onMeasure.
public class CustomVideoView extends VideoView {
public CustomVideoView(Context context) {
super(context);
}
public CustomVideoView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomVideoView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public CustomVideoView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int desiredWidth = getSuggestedMinimumWidth() + getPaddingLeft() + getPaddingRight();
int desiredHeight = getSuggestedMinimumHeight() + getPaddingTop() + getPaddingBottom();
setMeasuredDimension(
measureDimension(desiredWidth, widthMeasureSpec),
measureDimension(desiredWidth, widthMeasureSpec)
);
}
}
Ширина автоматически регулируется в зависимости от количества столбцов в GridLayoutManager. Однако я не хочу расширять каждое представление, которое необходимо изменить.
Есть ли лучший способ сделать это?