从代码配置 CoordinatorLayout

Configure CoordinatorLayout from code

我正在将内容视图动态注入到 CoordinatorLayout 中,现在想将 layout_below 属性 应用到注入的视图中,这样它就不会隐藏在AppBar.

有没有办法在运行时通过代码而不是注释的 xml 属性来执行此操作?

您可以尝试设置 anchor

ContentView view = getContentView(); //your view
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) view.getLayoutParams();

params.setAnchorId(R.id.app_bar_layout);
params.anchorGravity = Gravity.BOTTOM; //we will anchor to the bottom line of the appbar
params.gravity = Gravity.BOTTOM; //we want to be BELOW that line
view.setLayoutParams(params);

退后一步,用简单的 xml 构建整个视图,我意识到 layout_below 不是我的用例所需的 属性:将内容视图放在下面应用栏。不过,我没有在我的问题中明确说明这一点,因为我认为 layout_below 是正确的选择。

事实上,要在 CoordinatorLayout 中插入一个非滚动视图,首先应该用 android.support.v4.widget.NestedScrollView 包裹起来。然后,为了避免其内容被隐藏在应用栏后面,有必要将其行为更新为 android.support.design.widget.AppBarLayout.ScrollingViewBehavior。否则将使用隐藏在应用栏后面的默认行为。

val viewToInsert = getLayoutInflater.inflate( id, coordinatorWrapper, false )
val p = viewToInsert.getLayoutParams.asInstanceOf[Coordinator.LayoutParams]
p.setBehavior( new ScrollingViewBehavior )
coordinatorWrapper.addView( viewToInsert, 1, p )