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、动态设置控件高度
在有些条件下,我们需要给部分控件动态设置,宽度属性。如上,全部布局用了
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是计算出来的宽度,然后将宽度传到类里面。
给对应的 控件 设置上宽度就可以了。
基本就到这里,就完成了动态的设置控件的宽,如有疑问,欢迎留言交流。
书到用时方恨少,纸上得来终觉浅。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115005.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...