android如何在onCreateView中获取高度和宽度

android如何在onCreateView中获取高度和宽度,第1张

概述我正在以编程方式创建我的视图,根本没有xml,需要我正在使用的区域的实际大小.我一直在使用此代码: public static class DummySectionFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup conta 我正在以编程方式创建我的视图,根本没有xml,需要我正在使用的区域的实际大小.我一直在使用此代码:

public static class DummySectionFragment extends Fragment {   @OverrIDe            public VIEw onCreateVIEw(LayoutInflater inflater,VIEwGroup container,Bundle savedInstanceState) {                if (container == null) {                    return null;                }                Context context = getActivity();                int tabNo = getArguments().getInt(ARG_SECTION_NUMBER);                display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultdisplay();                // check display size to figure out what image resolution will be loaded                displayMetrics metrics = new displayMetrics();                display.getMetrics(metrics);                Point size = new Point();                display.getRealSize(size);                display.getSize(size);                int wIDth = size.x;                int height = size.y;

但这并没有考虑所有其他’装饰’,如标题栏和导航栏

文档说不使用显示指标来获取大小,但我怎样才能找到onCreateVIEw中视图的大小?我尝试了container.getHeight(),但返回0

我想问题是视图尚未创建但是必须有onCreateVIEw的父级知道视图有多大吗?

我怎么找到的?

谢谢

仅供参考,这有效:

@OverrIDepublic VIEw onCreateVIEw(LayoutInflater inflater,Bundle savedInstanceState) {    if (container == null) {        return null;    }    Context context = getActivity();    int tabNo = getArguments().getInt(ARG_SECTION_NUMBER);    display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultdisplay();    // check display size to figure out what image resolution will be loaded    displayMetrics metrics = new displayMetrics();    display.getMetrics(metrics);    Point size = new Point();    display.getRealSize(size);    display.getSize(size);    int wIDth = size.x;    int height = size.y;    switch (metrics.densityDpi) {        case displayMetrics.DENSITY_XXHIGH:     height -= 72;      break;        case displayMetrics.DENSITY_XHIGH:      height -= 64;      break;        case displayMetrics.DENSITY_HIGH:       height -= 48;      break;        case displayMetrics.DENSITY_MEDIUM:     height -=  32;      break;        case displayMetrics.DENSITY_LOW:        height -=  24;      break;        default:            Log.e("onCreateVIEw","UnkNown density");        }    }

但它似乎不是一个干净的方式来做到这一点.我猜到xhigh和xxhigh,我还没有找到实际的数字

另外我应该补充说,视图是从MainActivity中的onTabSelected创建的,就像这样

@OverrIDe    public voID onTabSelected(Actionbar.Tab tab,FragmentTransaction fragmentTransaction) {        // When the given tab is selected,show the tab contents in the        // container vIEw.        Fragment fragment = new DummySectionFragment();        Bundle args = new Bundle();        args.putInt(DummySectionFragment.ARG_SECTION_NUMBER,tab.getposition() + 1);        fragment.setArguments(args);        getSupportFragmentManager().beginTransaction().replace(R.ID.container,fragment).commit();    }
解决方法 我想我拥有它

我认为getSize返回realsize减去导航栏,所以我需要减去 *** 作栏

所以现在我这样做:

@OverrIDe        public VIEw onCreateVIEw(LayoutInflater inflater,Bundle savedInstanceState) {            if (container == null) {                return null;            }            Context context = getActivity();            int tabNo = getArguments().getInt(ARG_SECTION_NUMBER);            display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultdisplay();            // check display size to figure out what image resolution will be loaded            displayMetrics metrics = new displayMetrics();            display.getMetrics(metrics);            Point size = new Point();            display.getSize(size);            int wIDth = size.x;            int height = size.y;            TypedValue tv = new TypedValue();            int actionbarHeight=0;            if (context.gettheme().resolveAttribute(androID.R.attr.actionbarSize,tv,true))            {                actionbarHeight = TypedValue.complexToDimensionPixelSize(tv.data,getResources().getdisplayMetrics());            }            height -= actionbarHeight;            //Log.d("MainActivity","onCreateVIEw tabNo="+tabNo +" display wIDth="+wIDth+" height="+height+" rotation="+rotation);            switch(tabNo){            case 1:                return onCreateVIEwscoreFragment(context,wIDth,height);            case 2:                return onCreateVIEwfilesFragment(context,inflater,wIDth>height);            default:                return onCreateVIEwSettingsFragment(context,wIDth>height);            }        }

它适用于我的平板电脑,我不是100%肯定其他设备,我将不得不等待,看看我的客户说什么

总结

以上是内存溢出为你收集整理的android如何在onCreateView中获取高度宽度全部内容,希望文章能够帮你解决android如何在onCreateView中获取高度和宽度所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1127423.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存