鸿蒙OS应用开发之每日一坑(页面转为横屏时显示不全但无法滑动浏览)

问题描述:

        看完<HarmonyOS第一课>从简单的页面开始视频教程后开始自己动手实现UI,因为在敲代码的时候就看着竖屏的预览去做的,但是等做完后发现转为横屏时显示不全,而且无法滑动浏览整页信息,如下图,只有下面的list容器可以滑动浏览,无法拖动“李先生字样”

        这条帖子有点水,适用小白中的小白,但是我相信一定有人跟我一样碰到过

问题定位及解决过程:

1.最好的定位办法当然是拿出官方的例程源码去对比,看看是否有哪个属性遗漏导致页面无法滑动,对比之后并没有发现问题,于是预览了源码页面发现官方源码也存在这个问题。。。。这不是纯纯浪费时间码,下次先预览对比件

2.代码对比走不通只能代码检视正向定位了,检查滑动组件scroll的插入位置,在build容器下,整个页面滑动,代码逻辑没问题

3.页面简单替换方便定位问题,直接简单粗暴查看组件位置和大小,这个时候才反应过来如果组件大小小于一页不会触发滑动

4.检查当前组件和父组件大小是否小于一页,果然,,,父组件height给的100%,修改百分比为数值后可以正常滑动,教训啊,有滑动需求的时候组件尺寸真的不能用百分比

求助问题:

页面尺寸不同的时候有什么办法可以自动转化这个数值呀,整个页面大小定义100%真的很好用,但是切换屏幕大小的时候就不合适了,有没有什么能锁定长宽比,width设置100%,长度按照竖屏长度的100%,在横屏的时候可以自动切换成数值呀,有大佬简单方法可以评论分享一下

  • 11
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现这个功能,可以通过在 ViewPager2 的 Adapter 中重写 `onViewAttachedToWindow()` 方法来控制页面滑动。具体步骤如下: 1. 在 Adapter 中定义一个变量 `fixedPosition`,表示固定位置的页面的索引。 2. 在 `onViewAttachedToWindow()` 方法中,判断当前绑定的页面是否是固定位置的页面,如果是,则将其禁止滑动;否则,保持正常的滑动行为。 示例代码如下: ```java public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { private List<Fragment> fragments; private int fixedPosition; public MyAdapter(List<Fragment> fragments, int fixedPosition) { this.fragments = fragments; this.fixedPosition = fixedPosition; } @NonNull @Override public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_page, parent, false); return new MyViewHolder(view); } @Override public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { holder.bind(fragments.get(position)); } @Override public int getItemCount() { return fragments.size(); } @Override public void onViewAttachedToWindow(@NonNull MyViewHolder holder) { super.onViewAttachedToWindow(holder); int position = holder.getAdapterPosition(); if (position == fixedPosition) { holder.itemView.setTranslationX(0); holder.itemView.setClickable(false); } else { holder.itemView.setTranslationX(-holder.itemView.getWidth() / 3f); holder.itemView.setClickable(true); } } static class MyViewHolder extends RecyclerView.ViewHolder { private TextView textView; public MyViewHolder(@NonNull View itemView) { super(itemView); textView = itemView.findViewById(R.id.text); } public void bind(Fragment fragment) { textView.setText(fragment.toString()); } } } ``` 在这个示例中,我们假设 `fixedPosition` 为 0,表示第一个页面是固定位置的页面。在 `onViewAttachedToWindow()` 方法中,如果当前绑定的页面是第一个页面,则将其禁止滑动,否则将其向左平移 1/3 的宽度,并启用点击事件。 注意:这种方式只是实现了页面滑动的效果,但是用户仍然可以通过点击页面来切换页面。如果需要完禁止用户切换页面,可以在禁止页面滑动的同,禁用 ViewPager2 的滑动事件。 希望这个回答能够帮到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值