我在relativeLayout中动态创建了一些ImageViews,但我需要根据屏幕的高度和宽度来改变大小。在我设置高度的时候,还没有创建视图和布局,这意味着getHeight()
和getWidth()
返回0.我已经查看了StackOverflow上的其他线程,但似乎没有一个特定于我的问题
我正在片段中做所有这些,并希望得到任何有关如何解决这个问题的指导。她是我代码的一小部分。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState){
View v = inflater.inflate(R.layout.fragment_hello_moon, parent, false);
RelativeLayout rl = (RelativeLayout) v.findViewById(R.id.l1);
tl.setBackgroundColor(Color.RED);
ArrayList<ImageView> imgViews = new ArrayList<ImageView>();
//Cant get height or width of parent as hasnt been created yet
int numberOfBells = 16;
int height = rl.getHeight() / numberOfBells;
int width = rl.getWidth() / 2;
final ImageView imageTopL = new ImageView(getActivity());
if (true){
imageTopL.setId(1);
imageTopL.setImageResource(R.drawable.bell_dl_256);
RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
params1.addRule(RelativeLayout.ALIGN_PARENT_TOP);
params1.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
params1.setMargins(50,10,0,10);
imageTopL.setLayoutParams(params1);
//Need the size to vary depending on the height/width
imageTopL.getLayoutParams().height = height;
imageTopL.getLayoutParams().width = width;
imageTopL.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
imageTopL.setImageResource(R.drawable.bell_ul_256);
}
});
imgViews.add(imageTopL);
}
for(ImageView i : imgViews){
rl.addView(i);
}
return v;
}
答案 0 :(得分:2)
获取您可以尝试的屏幕大小:
DisplayMetrics metrics = this.getResources().getDisplayMetrics();
int width = metrics.widthPixels;
int height = metrics.heightPixels;
答案 1 :(得分:0)
您正试图在实际测量并放置在屏幕上之前获取视图的大小(在onCreateView返回之前)。仅仅因为你给视图充气并不意味着系统对尺寸有任何想法。尝试在onCreateView返回后像onActivityCreated一样计算大小。
答案 2 :(得分:0)
查看getWidth() and getHeight() always returning 0的第一个答案。基本上,您必须等到第一个度量和布局传递之后,直到调用onCreateView()
和onViewCreated()
之后才会发生。
答案 3 :(得分:0)
你可以使用
获得身高和宽度getViewTreeObserver().addOnPreDrawListener(new OnPreDarwListener() {
.... run () {
getHeight() + getWidth related stuff.
getViewTreeObserver.removeOnPreDrawListener(this);
}
});
答案 4 :(得分:0)
要查找屏幕的高度和宽度,您可以尝试:
DisplayMetrics metrics = new DisplayMetrics(); //for all android versions
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int Measuredwidth = metrics.widthPixels;
int Measuredheight = metrics.heightPixels;