Gravity set динамически не работает с Framelayout
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
params.gravity = Gravity.BOTTOM;
myFrameLayout.setLayoutParams(params);
У меня есть только текстовое представление внутри моего фрейм-макета, и я хочу в некоторых условиях установить его гравитацию на дно. Я пытаюсь с этим кодом, но он не работает.
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="top|center_horizontal">
<TextView
android:id="@+id/preview_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</FrameLayout>
3 ответа
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
params.gravity = Gravity.BOTTOM;
myTextView.setLayoutParams(params);
Используйте этот код, который устанавливает параметры для экземпляра textview.
Может быть, вы пытаетесь сделать это на OnCreate, а макет кадра еще не создан, вы можете попробовать использовать
ViewTreeObserver viewTreeObserver = myFrameLayout.getViewTreeObserver();
if (viewTreeObserver.isAlive()) {
viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
myFrameLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
params.gravity = Gravity.BOTTOM;
myFrameLayout..setLayoutParams(params);
}
}
}
это установит гравитацию только после создания макета кадра.
Попробуйте использовать Linear Layout вместо Frame Layout или используйте линейный макет внутри вашего фрейма.