Как изменить размеры просмотров в зависимости от размера экрана? - PullRequest
0 голосов
/ 16 января 2019

В моем обзоре утилит с помощью 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. Однако я не хочу расширять каждое представление, которое необходимо изменить.

Есть ли лучший способ сделать это?

...