4. Вид на чертеже (в): расположение

процесс 1.Layout

  1. Просмотр макета
    макет метода для определения положения самого представления
public void layout(int l, int t, int r, int b) {
	...
}
  • Первое положение установки на четыре точки setFrame, вид в родительских судах, чтобы определить
  • Внутренние вызовы макета OnLayout, суб-элементов для определения положения родительского контейнера (View нереализованный OnLayout, нуждается в своей собственной реализации)
/**
     * Called from layout when this view should
     * assign a size and position to each of its children.
     *
     * Derived classes with children should override
     * this method and call layout on each of
     * their children.
     * @param changed This is a new size or position for this view
     * @param left Left position, relative to parent
     * @param top Top position, relative to parent
     * @param right Right position, relative to parent
     * @param bottom Bottom position, relative to parent
     */
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
    }
  1. ViewGroup расположения ,
    чтобы определить расположение всех дочерних элементов
  • Окончательный макет метод ViewGroup, не могут перезаписать, реализованы как View.layout
    @Override
    public final void layout(int l, int t, int r, int b) {
        if (!mSuppressLayout && (mTransition == null || !mTransition.isChangingLayout())) {
            if (mTransition != null) {
                mTransition.layoutChange(this);
            }
            super.layout(l, t, r, b);
        } else {
            // record the fact that we noop'd it; request layout when transition finishes
            mLayoutCalledWhileSuppressed = true;
        }
    }
  • ViewGroup.onLayout абстрактного метода, мы должны переопределить
    @Override
    protected abstract void onLayout(boolean changed,
            int l, int t, int r, int b);

3. Резюме

  • Просмотр ViewGroup с макетом реального процесса, OnLayout достигаются, в соответствии с необходимостью достижения макета конкретного, обратитесь к TextView, для достижения LinearLayout.
  • процесс измерения ширины и измерения высоты определяет, 4 процесс компоновки определяет конечное положение, то есть ширина и высота точки, разные?
    его мера, getMeasureWidth
    MLEFT - схема, GetWidth = mRight
    два разных значения синхронизации равны, измеряют первым, после компоновки,
    если перезапись View.layout, изменить параметры 4:00, приведет к двум различным
Опубликовано 37 оригинальные статьи · вона похвала 0 · Просмотров 544

рекомендация

отblog.csdn.net/qq_37514242/article/details/104445619