
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中获取高度和宽度所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)