我的Activity底部有一个片段,可以填充单词(views)。
这是片段的图像:
在蓝色按钮之间,您可以通过单击位于此片段上方的GridView中的项目来扩充视图。每次我点击一个项目的文字视图:正在添加“测试”。它从膨胀视图开始,直到它不再适合LinearLayout。
当布局看起来已满时,您仍然可以对视图进行充气,但不会再看到它们被添加。 你可以在上面的图像上看到的最右边的紫色视图比其他的更高,因为它不再适合。
我想检查LinearLayout中是否有足够的空间来膨胀新视图。 这是扩展LinearLayout中视图的代码:
public void inflateAllViews(){
LayoutInflater inflaterr = (LayoutInflater) MainApplication.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
linearLayout.removeAllViews();
ArrayList<WordTile> wordsToInflate = WordManager.getWordsToInflate();
for(WordTile WordTile : wordsToInflate){
View word = inflaterr.inflate(R.layout.word, null);
final TextView textView = (TextView)word.findViewById(R.id.text_word);
textView.setText(WordTile.getTitle());
linearLayout.addView(word);
}
}
但是我需要检查是否可以添加视图,因为没有剩余空间。因为在后台,您可以向LinearLayout添加无限制的视图。
我试图找到一种计算膨胀视图宽度的方法。我发现的唯一一件事是:
ViewTreeObserver vto = word.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Log.d("TEST", "Height = " + word.getHeight() + " Width = " + word.getWidth());
widthOfChildren += word.getWidth();
System.out.println("widthofchildren:" + widthOfChildren);
ViewTreeObserver obs = word.getViewTreeObserver();
obs.removeGlobalOnLayoutListener(this);
}
});
代码工作并打印每个视图所需的宽度。但我不能使用OnGlobalLayoutListener ....之外的宽度。
有没有人能解决我的问题?
编辑:
问题不在于LinearLayout的宽度,因为我知道宽度,它是LinearLayout中视图的宽度。 LinearLayout的标准宽度不会改变。