ViewSwitcher 子布局无法居中 /子布局无法填满容器问题


今天在做一个项目的时候用到了ViewSwitcher,然而却遇到了子布局无法居中的问题,以下是问题代码


historySwitcher = (ViewSwitcher) findViewById(R.id.history_container);
        historySwitcher.setFactory(new ViewSwitcher.ViewFactory()
        {
            // 实际上就是返回一个view
            @Override
            public View makeView()
            {
                return LayoutInflater.from(mContext).inflate(R.layout.history_view,null);
            }
        });

按照网上的例子,直接以匿名内部类的方法新建了viewFactory


之后,对获取到的view进行加工


            SpannableStringBuilder text= new SpannableStringBuilder(mContext.getResources().getString(R.string.history_empty));
            text.setSpan(new AbsoluteSizeSpan(60), 0, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

            viewToShow.findViewById(R.id.history_list).setVisibility(View.GONE);
            TextView tv = viewToShow.findViewById(R.id.history_action_name);
            tv.setText(text);
            viewToShow.setForegroundGravity(Gravity.CENTER);
            historySwitcher.showNext();
        

这时候遇到问题,上述代码的textview无论如何都无法居中

将布局染色后发现,R.layout.history_view这个布局没有填满预留出的位置,导致此问题


排查后发现,是由于ViewSwitcher返回的view没有绑定根所导致的,修改第一段代码如下

 historySwitcher = (ViewSwitcher) findViewById(R.id.history_container);
        historySwitcher.setFactory(new ViewSwitcher.ViewFactory()
        {
            // 实际上就是返回一个view
            @Override
            public View makeView()
            {
                return LayoutInflater.from(mContext).inflate(R.layout.history_view,(ViewGroup) getWindow().getDecorView().findViewById(android.R.id.content),
                        false);
            }
        });



注意,为了使布局摆放更加合理,应主动绑定父布局

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值