Android 在相对视图内以编程方式在布局下方布局

Android 在相对视图内以编程方式在布局下方布局,android,android-recyclerview,android-relativelayout,Android,Android Recyclerview,Android Relativelayout,当一个视图位于另一个视图之下时,我试图通过编程将两个视图添加为根RelativeLayout的子视图 下面是根视图(它也位于另一个CoordinatorLayout中,但我不认为这是相关的): 结果是:底部视图不可见 我尝试的是: 将第一个RecyclerView的高度更改为WRAP\u CONTENT(认为它可能会填满所有空间并隐藏底部布局),但没有效果 不要将LayoutParams设置为底部视图,而是: container.addView(bottomView, lp); 但它也不起作

当一个视图位于另一个视图之下时,我试图通过编程将两个视图添加为根
RelativeLayout
的子视图

下面是根视图(它也位于另一个
CoordinatorLayout
中,但我不认为这是相关的):

结果是:底部视图不可见

我尝试的是:

  • 将第一个
    RecyclerView
    的高度更改为
    WRAP\u CONTENT
    (认为它可能会填满所有空间并隐藏底部布局),但没有效果
  • 不要将
    LayoutParams
    设置为底部视图,而是:

    container.addView(bottomView, lp);
    
  • 但它也不起作用

  • 使用
    LinearLayout
    而不是
    RelativeLayout
    容器,也可以使用相同的行为
    我已经不知道是什么导致了这个问题,通过研究类似的问题,没有任何效果。你知道我做错了什么吗?

    你的第一个视图是RecyclerView,它是一个可滚动的视图。将“高度包裹”内容设置为RecyclerView/ListView并不重要。在所有情况下,它都会填满整个屏幕,除非你为RecyclerView设置了一个特定的高度,明显小于设备的高度。此时将显示RecyclerView下面的第二个视图。以下是您可以尝试的内容:

    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, HEIGHT_OF_VIEW);
    recyclerView.setLayoutParams(params);
    

    您的第一个视图是RecyclerView,它是一个可滚动的视图。将“高度包裹”内容设置为RecyclerView/ListView并不重要。在所有情况下,它都会填满整个屏幕,除非你为RecyclerView设置了一个特定的高度,明显小于设备的高度。此时将显示RecyclerView下面的第二个视图。以下是您可以尝试的内容:

    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, HEIGHT_OF_VIEW);
    recyclerView.setLayoutParams(params);
    

    线性布局方法应该有效

    记住:
    1) 容器线性布局应具有布局\高度匹配\父级
    2) RecyclerView的布局高度应为0,布局重量应为1

    如果您想保留RelativeLayout方法,请尝试:
    1) 具有规则相对性的底部布局yout.ALIGN_PARENT_BOTTOM
    2) 具有上述规则RelativeLayout.com的RecyclerView

    示例2方法:

    RelativeLayout containerLayout = (RelativeLayout) findViewById(R.id.container);
    
    RelativeLayout bottomLayout = new RelativeLayout(this);
    bottomLayout.setId(R.id.bottom_id);
    RelativeLayout.LayoutParams bottomLayoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
                bottomLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
    bottomLayout.setLayoutParams(bottomLayoutParams);
    bottomLayout.setBackgroundColor(Color.RED);
    TextView bottomTextView = new TextView(this);
    bottomTextView.setText("Bottom Layout");
    bottomLayout.addView(bottomTextView);
    containerLayout.addView(bottomLayout);
    
    RecyclerView recyclerView = new RecyclerView(this);
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    params.addRule(RelativeLayout.ABOVE, R.id.bottom_id);
    recyclerView.setLayoutParams(params);
    recyclerView.setBackgroundColor(Color.BLUE);
    containerLayout.addView(recyclerView);
    

    线性布局方法应该有效

    记住:
    1) 容器线性布局应具有布局\高度匹配\父级
    2) RecyclerView的布局高度应为0,布局重量应为1

    如果您想保留RelativeLayout方法,请尝试:
    1) 具有规则相对性的底部布局yout.ALIGN_PARENT_BOTTOM
    2) 具有上述规则RelativeLayout.com的RecyclerView

    示例2方法:

    RelativeLayout containerLayout = (RelativeLayout) findViewById(R.id.container);
    
    RelativeLayout bottomLayout = new RelativeLayout(this);
    bottomLayout.setId(R.id.bottom_id);
    RelativeLayout.LayoutParams bottomLayoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
                bottomLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
    bottomLayout.setLayoutParams(bottomLayoutParams);
    bottomLayout.setBackgroundColor(Color.RED);
    TextView bottomTextView = new TextView(this);
    bottomTextView.setText("Bottom Layout");
    bottomLayout.addView(bottomTextView);
    containerLayout.addView(bottomLayout);
    
    RecyclerView recyclerView = new RecyclerView(this);
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    params.addRule(RelativeLayout.ABOVE, R.id.bottom_id);
    recyclerView.setLayoutParams(params);
    recyclerView.setBackgroundColor(Color.BLUE);
    containerLayout.addView(recyclerView);
    

    为什么所有的询问者都在使用setLayoutParams,而你有一个对addView的调用,它应该在那里将layoutparams作为2º参数传递……你知道,当一件事不起作用时,你就在尝试另一件事。我不确定有什么不同(我假设有),我提到我尝试了所有的方法。在你去问其他人之前,你不尝试你所知道的一切吗?为什么所有的询问者都在使用setLayoutParams,而你有权调用addView,在那里它应该将layoutparams作为2º参数传递…你知道,当一件事不起作用时,你在尝试另一件事。我不确定有什么不同(我假设有),我提到我尝试了所有的方法。在你去问别人之前,你不想尝试你所知道的一切吗?我不知道前面的recycler视图的大小,因为只有在运行时适配器项才会被实例化。除非我通过编程提前设置适配器项的大小。。。但这感觉不对,我不知道前面的recycler视图的大小,因为只有在运行时才实例化适配器项。除非我通过编程提前设置适配器项的大小。。。但第一种方法的结果是只有底部视图可见。第二种方法会导致视图可见和重叠…我添加了一个你问我的RelativeLayout方法的示例,我猜这不起作用,因为我在一个坐标布局中(基本上我有一个灵活的空间,上面有一个图像。尝试在图像上添加额外的文本,但不起作用)第一个进近结果是只有底部视图可见。第二种方法会导致视图可见和重叠…我添加了一个你问我的RelativeLayout方法的示例,我猜这不起作用,因为我在一个坐标布局中(基本上我有一个灵活的空间,上面有一个图像。尝试在图像上添加额外的文本,但不起作用)
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, HEIGHT_OF_VIEW);
    recyclerView.setLayoutParams(params);
    
    RelativeLayout containerLayout = (RelativeLayout) findViewById(R.id.container);
    
    RelativeLayout bottomLayout = new RelativeLayout(this);
    bottomLayout.setId(R.id.bottom_id);
    RelativeLayout.LayoutParams bottomLayoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
                bottomLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
    bottomLayout.setLayoutParams(bottomLayoutParams);
    bottomLayout.setBackgroundColor(Color.RED);
    TextView bottomTextView = new TextView(this);
    bottomTextView.setText("Bottom Layout");
    bottomLayout.addView(bottomTextView);
    containerLayout.addView(bottomLayout);
    
    RecyclerView recyclerView = new RecyclerView(this);
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    params.addRule(RelativeLayout.ABOVE, R.id.bottom_id);
    recyclerView.setLayoutParams(params);
    recyclerView.setBackgroundColor(Color.BLUE);
    containerLayout.addView(recyclerView);