2016-06-01 2 views
1

Я хотел бы квадрат FrameLayout, который заполняет ширину его родителя и высота которого соответствует его ширине. Я пробовал добавить в макет addOnLayoutChangeListener, но я не могу позвонить requestLayout на нем изнутри, поэтому у меня нет способа сказать, что он изменил размер.Android динамически меняет размер макета

Что я могу сделать, чтобы его высота была равна ширине во время выполнения?

ответ

1

Простое решение продлить FrameLayout

public class SquareFrameLayout extends FrameLayout { 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     super.onMeasure(widthMeasureSpec, widthMeasureSpec); 
      // or you can use this if you want the square to use width as it basis 
      super.onMeasure(widthMeasureSpec, widthMeasureSpec); 
    } 
} 

использовать его макет, как показано ниже

<your.package.SquareFrameLayout 
    android:layout_width="match_parent" 
    ......> 
     <!-- other child views --> 
</your.package.SquareFrameLayout> 
+1

Я надеялся, что не переопределить макет, но вы, вероятно, правы, это самый простой способ. Благодаря! – Nick

+0

@ Ник приветствую счастливое кодирование :) –

+0

@ Ник тоже проголосует :) –

0

После получения Ваше мнение просто сделайте следующее

ViewGroup.LayoutParams lp = view.getLayoutParams(); 
    Display display = ((AppCompatActivity) context).getWindowManager().getDefaultDisplay(); 
    Point size = new Point(); 
    display.getSize(size); 
    int screenWidth = size.X; 
    lp.height = screenWidth; 
    view.setLayoutParams(lp); 
+0

Я собираюсь добавить представление программно, потому что оно изменится. Спасибо за ваш ответ! – Nick

+0

хороший ответ, логика. Это пригодится –