Closed 7449 closed 6 years ago
@7449 那个作者好像不怎么说话了,所以麻烦一下向您请教个问题! 在 FilmLiveAdapter 中有这么几行代码(大约在40行):
ViewGroup.LayoutParams params=holder.iVFilm.getLayoutParams();
int width= ScreenUtils.getScreenWidthDp(context);
int ivWidth=(width-ScreenUtils.dipToPx(context,80))/3;
params.width=ivWidth;
double height=(420.0/300.0)*ivWidth;
params.height=(int)height;
holder.iVFilm.setLayoutParams(params);
这个应该是适配的代码,可是我却不明白为什么这个适配的算法要这么写,我通过打log也得出他们的值了我的手机是MX6!
width = 1080
ScreenUtils.dipTopx =240
ivWidth = 280
height = 392.0
我技术不是很好,您能给我讲一下吗? 非常感谢
@ZhangLanqiu ImageView的高宽都是wrap_content,代码中宽高,LayoutParams是用于子view给父view传达自己想变成什么样子的一个类,代码中设置的是px,而不是dp。
你可以注掉这段代码,xml 宽设置为match_parent,高度为160dp左右 或者
holder.iVFilm.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, (int) height));
效果都差不多
@7449 非常感谢! 这块我清楚了!但是。。。。还是有些地方我不是很明白! 拜谢了! 1、图片的宽度为什么要这么算? 获取屏幕的宽度我理解,但是为什么还要减去一个 dipToPx ? 最后还 / 3 ??
int ivWidth=(width-ScreenUtils.dipToPx(context,80))/3
width = 1080 ScreenUtils.dipToPx(context,80) = 240 ivWidth=280
2、计算高度的时候为什么还要先拿 ( 420.0 / 300.0 ) * ivWidth ?
这些地方我自己琢磨不明白,网上也不知道怎么查! 这个问题可能对您来说很简单,可是对于我这个半吊子水准的人不是很明白! 希望您看到并且有空的话,解答一下! 再次感谢了
其实没必要除以3,因为recyclerView已经设置了
recyclerview.setLayoutManager(new GridLayoutManager(getActivity(), 3));
item会自己三分屏幕,至于高度还有dipToPx由你自己写,你想的复杂了,你试试去掉dipToPx,直接除以3,就只是item变高了而已。
@7449
根据你描述的方法,加上了@colorint,在切换主题时状态栏颜色依然没有改变
你仔细看statusBarUtils的源码,color值是用@colorInt注解修饰的,你getThemeColor的时候并没有使用@ColorInt修饰,所以无法修改颜色值 解决办法:
@ColorInt public static int getThemeColor() { SharedPreferences pref = context.getSharedPreferences("ThemeColor", context.MODE_PRIVATE); return pref.getInt("themeColor", defalutThemeColor); }
getThemeColor用@ColorInt修饰 StatusBarUtils本身并没有问题