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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 计算机科学丛书豆瓣_有关计算机科学与技术专业的书籍

    计算机科学丛书豆瓣_有关计算机科学与技术专业的书籍1.TheArtofComputerProgramming  Author:Donald.E.Knuth  Website:http://www-cs-faculty.stanford.edu/~knuth/taocp.html  BookInfo:这部书被誉为20世纪最重要的20部著作之一,与Einstein的>并列,是计算机科学领域的权威著作.全书共分7卷,目前已经出版了3卷

    2025年6月16日
    3
  • 适配器及其作用[通俗易懂]

    适配器及其作用[通俗易懂]1.适配器适配器是一个接口转换器,它可以是一个独立的硬件接口设备,允许硬件或电子接口与其它硬件或电子接口相连,也可以是信息接口。但是现在的计算机主板上就已经嵌入了适配器,因此现在的计算机上的适配器不是独立的。2.适配器的作用1.要进行数据串行传输和并行传输的转换。2.对数据进行缓存。3.实现以太网协议。4.管理该适配器的设备驱动程序安装在计算机的操作系统。…

    2022年6月12日
    39
  • 开源在线客服系统源码(PHP开发的网页在线客服聊天系统源码)[通俗易懂]

    开源在线客服系统源码(PHP开发的网页在线客服聊天系统源码)[通俗易懂]开源在线客服系统源码是一个可以高度个性化定制客户支持管理系统,最初为IT支持公司开发,以管理和跟踪他们的支持案例、零售商店和业务客户。使用最新的编程语言和技术,是完全web启用。我们已经将它打包为一个VirtualBox映像,这样您就可以立即启动并运行它。  源码包及演示站:zxkfym.top    这个模块化系统对任何支持业务都具有很强的适应性,并且非常依赖核心模块,能够通过其开源库对其他模块进行调整和发展。    每天数以千计的用户使用轻量级开源客服系统软件跟踪、组织和解决客户问题,86%

    2022年7月19日
    73
  • Apache的URL地址重写(RewriteCond与RewriteRule)

    Apache的URL地址重写(RewriteCond与RewriteRule)Apache的URL地址重写http://hi.baidu.com/sonan/blog/item/c408963d89468208bba16716.html第一种方法:Apache环境中如果要将URL地址重写,正则表达式是最基本的要求,但对于一般的URL地址来说,基本的匹配就能实现我们大部分要求,因此除非是非常特殊的URL地址,但这不是我要讨论的范围,简单几招学会Apache中URL地

    2022年6月11日
    24
  • JQuery的submitHandler

    之前做表单验证,有设置submitHandlersubmitHandler:function(){$(“form”).submit();}这样表单验证通过后会自动提交。。。。改为submitHandler:function(form){form.submit();}否则,button按钮提交表单之后,表单会提交两次,前端造成stack溢出…

    2022年4月5日
    273
  • PHP开发WebaPP教程,开发webapp 需要什么技术基础吗? html5 js css3 PHP 除了这些还需要什么?…

    PHP开发WebaPP教程,开发webapp 需要什么技术基础吗? html5 js css3 PHP 除了这些还需要什么?…开发webapp需要什么技术基础吗?或者有没有开发webapp视频教程或者资料求推荐下回复内容:开发webapp需要什么技术基础吗?或者有没有开发webapp视频教程或者资料求推荐下数据库:比如mysqlSQL语言:对数据库编程的语言web容器:比如apache,nginx你还需要了解一些项目管理工具,如maven,svn,git等另外一些基础知识,如http、https协议等话说ap…

    2022年6月19日
    26

发表回复

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

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