HarmonyOS鸿蒙Next中ListContainer和DependentLayout同时使用问题

HarmonyOS鸿蒙Next中ListContainer和DependentLayout同时使用问题

使用以上布局时。

ListContainer的内容无法滚动到底部。使用DirectionalLayout就没有这样的问题。

如果将Text的height的值设置大一点就会出现这样的问题,小一点就不会出现问题。

以上是p40远程模拟器的测试结果

不知道是什么原因导致的。

5 回复
public class ListContainerLayout extends ComponentContainer
    implements
        ComponentContainer.ArrangeListener,
        ComponentContainer.EstimateSizeListener {

    private Context context;

    public ListContainerLayout(Context context) {
        this(context, null);
    }

    public ListContainerLayout(Context context, AttributeSet attrSet) {
        super(context, attrSet);
        init(context);
    }

    private void init(Context context) {
        this.context = context;
        setArrangeListener(this);
        setEstimateSizeListener(this);
    }

    @Override
    public boolean onEstimateSize(int i, int i1) {
        int maxi = EstimateSpec.getSize(i);
        int maxi1 = EstimateSpec.getSize(i1);

        setEstimatedSize(
            EstimateSpec.getSizeWithMode(maxi, EstimateSpec.PRECISE),
            EstimateSpec.getSizeWithMode(maxi1, EstimateSpec.PRECISE)
        );
        return true;
    }

    @Override
    public boolean onArrange(int i, int i1, int i2, int i3) {

        getComponentAt(0).estimateSize(
            EstimateSpec.getSizeWithMode(i2, EstimateSpec.PRECISE),
            EstimateSpec.getSizeWithMode(i3, EstimateSpec.PRECISE)
        );
        getComponentAt(0).arrange(0, 0, i2, i3);
        return true;
    }
}

更多关于HarmonyOS鸿蒙Next中ListContainer和DependentLayout同时使用问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


解决了。

解决方法:

<DependentLayout
 xmlns:ohos="http://schemas.huawei.com/res/ohos"
 ohos:height="match_parent"
 ohos:width="match_parent">

 <com.ohuang.baseapp.view.listContainer.ListContainerLayout
  ohos:height="1000"
  ohos:width="match_parent"
  ohos:below="$id:text">

  <ListContainer
   ohos:id="$+id:listview"
   ohos:height="0"
   ohos:width="0"
   />

 </com.ohuang.baseapp.view.listContainer.ListContainerLayout>

 <Text
  ohos:id="$+id:text"
  ohos:height="200"
  ohos:width="match_parent"
  ohos:align_parent_top="true"
  ohos:text="占位子"
  ohos:text_size="50"/>

</DependentLayout>
ListContainerLayout ComponentContainer
    ComponentContainer.ArrangeListenerComponentContainer.EstimateSizeListener {
        Context (Context context) {
            (context)}

        (Context contextAttrSet attrSet) {
            (contextattrSet)init(context)}

        (Context context) {
            .= contextsetArrangeListener()setEstimateSizeListener()}

        (ii1) {
            maxi=EstimateSpec.(i)maxi1=EstimateSpec.(i1)setEstimatedSize(EstimateSpec.(maxiEstimateSpec.)
            EstimateSpec.(maxi1EstimateSpec.))}

        (ii1i2i3) {

            getComponentAt().estimateSize(
                EstimateSpec.(i2EstimateSpec.)EstimateSpec.(i3EstimateSpec.)
            )getComponentAt().arrange(i2i3)}
}
把ListContainer的

```ohos:height="match_content"```

试试

在HarmonyOS鸿蒙Next中,ListContainerDependentLayout可以同时使用,但需要注意它们的布局特性。ListContainer是一个用于展示列表数据的容器,通常用于滚动列表场景。DependentLayout是一个相对布局容器,允许子组件通过相对位置关系进行布局。

ListContainerDependentLayout同时使用时,ListContainer作为父容器,DependentLayout作为ListContainer的子项布局。每个子项可以使用DependentLayout来定义其内部组件的相对位置关系。例如,可以在DependentLayout中放置多个组件,并通过alignment属性设置它们之间的相对位置。

在代码实现中,首先需要在ListContainerItemProvider中定义每个子项的布局,使用DependentLayout作为子项的根布局。然后,在DependentLayout中定义子组件的位置关系。需要注意的是,ListContainer的滚动特性可能会影响DependentLayout中子组件的布局,特别是在动态添加或删除子项时。

总结来说,ListContainerDependentLayout可以结合使用,ListContainer负责列表的滚动和子项管理,DependentLayout负责子项内部组件的相对布局。

在HarmonyOS鸿蒙Next中,ListContainerDependentLayout可以同时使用,但需要注意布局层级和组件嵌套关系。ListContainer用于展示列表数据,而DependentLayout用于实现相对布局。建议将ListContainer作为DependentLayout的子组件,通过DependentLayout的约束属性(如aligncenter_in等)来定位ListContainer。确保ListContainer的宽高设置合理,避免布局冲突或显示异常。

回到顶部