重力设置动态不适用于 Framelayout
Posted
技术标签:
【中文标题】重力设置动态不适用于 Framelayout【英文标题】:Gravity set dynamically not working with Framelayout 【发布时间】:2017-08-07 06:16:05 【问题描述】: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_
android:layout_
android:layout_gravity="top|center_horizontal">
<TextView
android:id="@+id/preview_content"
android:layout_
android:layout_ />
</FrameLayout>
【问题讨论】:
设置为文本视图而不是框架布局。 ((FrameLayout.LayoutParams) preview_content.getLayoutParams()).gravity = Gravity.BOTTOM 我按照你的说法试过了,但还是不行 谁能告诉我,params.gravity 相当于gravity 或layoutGravity? 【参考方案1】:FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
params.gravity = Gravity.BOTTOM;
myTextView.setLayoutParams(params);
使用此代码将参数设置为 textview 的实例。
【讨论】:
【参考方案2】:也许你正在尝试在 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);
这将仅在创建框架布局后设置重力。
【讨论】:
【参考方案3】:尝试使用线性布局而不是框架布局或在框架布局中使用线性布局。
【讨论】:
以上是关于重力设置动态不适用于 Framelayout的主要内容,如果未能解决你的问题,请参考以下文章
自定义 TextView 字体不适用于从 java android 设置文本
Routerlinkactive在Angular 8中的页面加载时不适用于动态生成的路由