【问题标题】:Configure CoordinatorLayout from code从代码配置 CoordinatorLayout
【发布时间】:2015-06-20 13:21:12
【问题描述】:

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

有没有办法在运行时通过代码而不是注解的 xml 属性来做到这一点?

【问题讨论】:

  • RelativeLayout不同,CoordinatorLayoutFrameLayout类似,没有layout_below属性。

标签: android android-layout android-coordinatorlayout


【解决方案1】:

退后一步,用纯 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 )

【讨论】:

    【解决方案2】:

    您可以尝试设置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);
    

    【讨论】:

    • 我也试过了;这似乎很简单。但它似乎没有任何效果。这对你有用吗?
    • 我从未尝试过,但应该。尝试以某种方式刷新布局(即coordinator.requestLayout()coordinator.recomputeViewAttributes(view)、...不知道你应该使用哪个。也用新行编辑了我的答案。
    • 您的答案是完全正确的,但是layout_below 不是我需要的选项(您无法从我的问题中知道)。我添加了描述如何解决问题的详细答案。
    猜你喜欢
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    相关资源
    最近更新 更多