1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/modificator-RatioLayout

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

RatioLayout

RatioLayout — раскладка по пропорциям, адаптивная для экрана.

Ужасаетесь ли вы от того, что UI указан только для iOS размерами?
В здравом уме? Объясняете девушке, что сошли с ума? Парню? Может стоит попробовать использовать врезку?
На глаз? Не смешивайте меня, ваш компьютерный экран слепит глаза.
Ещё пишете несколько наборов размеров для разных экранов? Отступитесь, нет времени на это.


Поскольку часто используется Relative, был переопределен RelativeLayout.

Затем, из-за эффекта Material Design с водой, был добавлен FrameLayout.

Способ использования:

    <cn.modificactor.ratiolayout.RatioRelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#00ff00"
        app:ratioHeight="10"
        app:ratioWidth="20"
        app:reference="width|height" />

Во-первых, вам нужно самостоятельно определить конкретные размеры высоты или ширины (работа продолжается). Затем заполните app:reference тем, что было определено ранее как высота или ширина. app:ratioHeight, app:ratioWidth — это пропорции высоты и ширины соответственно, вы можете также указывать размеры для iOS.

Нужно больше? Используйте конструктор для этого:

        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.RatioRelativeLayout, defStyleAttr, 0);
        // Получаем сторону для сравнения
        reference = typedArray.getInt(R.styleable.RatioRelativeLayout_reference, 0) == 0 ? ReferenceType.WIDTH : ReferenceType.HEIGHT;
        // Получаем пропорцию высоты
        ratioHeight = typedArray.getFloat(R.styleable.RatioRelativeLayout_ratioHeight, 1);
        // Получаем пропорцию ширины
        ratioWidth = typedArray.getFloat(R.styleable.RatioRelativeLayout_ratioWidth, 1);
        typedArray.recycle();

Затем заполните следующие поля:

    /**
     * Сторона для сравнения, по умолчанию ширина
     */
    ReferenceType reference = ReferenceType.WIDTH;
    /**
     * Пропорция ширины
     */
    double ratioWidth = 1;
    /**
     * Пропорция высоты
     */
    double ratioHeight = 1;

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        /**
         * Если ширина является основной стороной, то она остаётся неизменной, а высота рассчитывается по пропорции,
         * если же высота является основной стороной, то она остаётся неизменной, а ширина рассчитывается по пропорции
         */
        setMeasuredDimension(View.getDefaultSize(0, reference == ReferenceType.WIDTH ? widthMeasureSpec :
                        (int) (heightMeasureSpec / ratioHeight * ratioWidth)),
                View.getDefaultSize(0, reference == ReferenceType.HEIGHT ? heightMeasureSpec :
                        (int) (widthMeasureSpec / ratioWidth * ratioHeight)));

        int childSpec = reference == ReferenceType.WIDTH ? getMeasuredWidth() : getMeasuredHeight();
        /**
         * Получаем размер второй стороны
         */
        int measureSpec = reference == ReferenceType.HEIGHT ? MeasureSpec.makeMeasureSpec(
                (int) (childSpec / ratioHeight * ratioWidth), MeasureSpec.EXACTLY) :
                MeasureSpec.makeMeasureSpec(
                        (int) (childSpec / ratioWidth * ratioHeight), MeasureSpec.EXACTLY);

        super.onMeasure(reference == ReferenceType.WIDTH ? widthMeasureSpec : measureSpec, reference == ReferenceType.HEIGHT ? heightMeasureSpec : measureSpec);
    }

Это всё, работает для View & ViewGroup.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

RatioLayout — по пропорциям, адаптируется под экран. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/modificator-RatioLayout.git
git@api.gitlife.ru:oschina-mirror/modificator-RatioLayout.git
oschina-mirror
modificator-RatioLayout
modificator-RatioLayout
master