Android获取屏幕宽度高度并动态设置控件宽度,比例等

Android获取屏幕宽度高度并动态设置控件宽度,比例等

1、Android获取屏幕宽度的几种方法:

        //1、通过WindowManager获取
        DisplayMetrics dm = new DisplayMetrics();
        int heigth = dm.heightPixels;// 表示屏幕的像素高度,单位是px(像素)
        int width = dm.widthPixels;// 表示屏幕的像素宽度,单位是px(像素)

        //2、通过Resources获取
        DisplayMetrics dm = getResources().getDisplayMetrics();
        //这两个就是手机屏幕的屏幕分辨率,物理宽高值如1080*1920(ToolBar或ActionBar会占据一定空间,得到的heightPiexls会小一点)
        int width = metrics.widthPixels;// 表示屏幕的像素宽度,单位是px(像素)
        int height = metrics.heightPixels;// 表示屏幕的像素高度,单位是px(像素)

        float density = metrics.density;// 显示器的逻辑密度,Density Independent Pixel(如3.0),(metrics.scaledDensity和metrics.density数值是一样的)
        int densityDpi = metrics.densityDpi;  // 整个屏幕的像素密度DPI(dots per inch每英寸像素数),可以是密度低,密度中等,或者密度高(如240/ 360 / 480)
        float xdpi = metrics.xdpi;//表示在X轴方向上每英寸的像素值,X轴方向上的DPI(dots per inch)
        float ydpi = metrics.ydpi;//表示在Y轴方向上每英寸的像素值,  Y方向上的DPI

        //3、获取屏幕的默认分辨率
        Display display = getWindowManager().getDefaultDisplay();
        int heigth = display.getWidth();
        int width = display.getHeight();

        //4、通过类直接取
        getWindowManager().getDefaultDisplay().getMetrics(dm);

        方法一与方法三,获取屏幕宽度的方法类似,都是使用getWindowManager()得到的,但这个是建立在类Activity上的,如果自己的类没有继承这两个,则取不到数据。

还有 Display.getHeight(),Display.getWidth() 方法过时,推荐使用方法二 getResources()获取宽高。

 

2、动态设置控件高度

Android获取屏幕宽度高度并动态设置控件宽度,比例等

在有些条件下,我们需要给部分控件动态设置,宽度属性。如上,全部布局用了
HorizontalScrollView包含Linearlayout,设置layout_weight属性就不管用,考虑到适配,想到动态设置 宽

这个分类要求显示4个,

计算的思路:

是用 (屏幕宽度-2*中间linearlayout的 margin-2*中间linearlayout的padding)/4

就是每个item的宽度。

这里面还需要注意一点就是动态设置宽度 不要给item xml里面的设置

最外面的Linearlayout或者RelativeLayout设置width

这样可能会出错,直接给 布局里面的 textView 或者imageView设置就可以了
 

把下面获取宽度直接放在工具类,调用

	/**
	 * 获取屏幕宽度;
	 */
	public static int getScreenWidth(Context context) {
		return context.getApplicationContext().getResources()
				.getDisplayMetrics().widthPixels;
	}
ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) mLinearLayout.getLayoutParams();
        int margin = 0;
        int padding = 0;
        margin = layoutParams.leftMargin;
        padding = mLinearLayout.getPaddingLeft();

        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((AutoSizeUtil.getScreenWidth(getContext()) - (2 * margin) - (2 * padding)) / 4, LinearLayout.LayoutParams.WRAP_CONTENT);
        mLinearLayout.setLayoutParams(params);

mLinearLayout是中间的layout  , mItemWidth是计算出来的宽度,然后将宽度传到类里面。

给对应的 控件 设置上宽度就可以了。

 

基本就到这里,就完成了动态的设置控件的宽,如有疑问,欢迎留言交流。

书到用时方恨少,纸上得来终觉浅。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115005.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ue4 弱指针_智能指针如何实现自动释放

    ue4 弱指针_智能指针如何实现自动释放原创文章,转载请注明出处。UE4也有一套智能指针库,整理了一下做个介绍。也请大家做补充。共享指针/共享引用/弱指针/注意事项一.TSharePtr1.如何创建一个TSharePtr2.TSharePtr如何进行类型转换1)TSharePtr转TSharePtr2)ConstTSharePtr转TSharePtr3)TSharePtr转TShareRef3.使用注意事项1)TSharePtr2)类型转换二.TShareRef1.如何创建一个TShareRef2.TShareRef如何进行类型转换1)TS

    2022年10月4日
  • amazeui页面分析3

    amazeui页面分析3

    2021年5月27日
  • clion2021.12.13激活(注册激活)

    (clion2021.12.13激活)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月30日
  • MIPI协议知识

    MIPI协议知识转发路径:https://blog.csdn.net/weixin_41842559/article/details/109828013?spm=1001.2101.3001.6650.14&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-14.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_

    2022年6月2日
  • xshell安装python库_xshell安装jdk

    xshell安装python库_xshell安装jdkxshell安装python下载需要的python.tgz包。https://www.python.org/把下载好的包上传到xshell中,然后解压。tar-zxvfPython-3.6.6.tgz编译安装,进入python文件夹cdPython-3.6.6,执行命令进行编译./configure–prefix=/usr/local/python36//默认安装在/usr/local下make#相当于把源码包里面的代码编译成linux服务器可以识别的代码

    2022年9月9日
  • bytebuf详解_byte int

    bytebuf详解_byte int@author鲁伟林记录《Netty实战》中各章节学习过程,写下一些自己的思考和总结,帮助使用Netty框架的开发技术人员们,能够有所得,避免踩坑。本博客目录结构将严格按照书本《Netty实战》,省略与Netty无关的内容,可能出现跳小章节。本博客中涉及的完整代码:GitHub地址:https://github.com/thinkingfioa/netty-learning/tre…

    2022年9月19日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号