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

来源:互联网 发布:最大的建筑知乎 编辑:程序博客网 时间:2024/06/08 17:57


今天在做一个项目的时候用到了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);            }        });



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

阅读全文
0 0
原创粉丝点击