我以编程方式添加horizontalScrollView,但是当我尝试使用horizontalScrollView.getMeasuredWidth()时,它会一直返回0.
void addCategory(String catTitle) {
mVideos = mShows.get(catTitle);
LinearLayout theLayout = (LinearLayout)findViewById(R.id.activitymain);
TextView textview=(TextView)getLayoutInflater().inflate(R.layout.categorytitle,null);
textview.setTextColor(Color.CYAN);
textview.setTextSize(20);
textview.setText(catTitle);
HorizontalScrollView horizontalScroll = new HorizontalScrollView (this,null);
LinearLayout LL = new LinearLayout(this);
LL.setOrientation(LinearLayout.HORIZONTAL);
LayoutParams LLParams = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
LL.setLayoutParams(LLParams);
HorizontalGalleryAdapter adapter = new HorizontalGalleryAdapter(this,mVideos);
for (int i = 0; i < adapter.getCount(); i++) {
View item = adapter.getView(i, null, null);
LL.addView(item);
}
horizontalScroll.addView(LL);
int maxScrollX = horizontalScroll.getChildAt(0).getMeasuredWidth()-horizontalScroll.getMeasuredWidth();
AlertDialog alertDialog = new AlertDialog.Builder(this).create();
alertDialog.setTitle("Reset...");
String max= String.valueOf(maxScrollX);
答案 0 :(得分:2)
好的,我看到了问题。您创建一个HorizontalScrollView,向其添加一个子项,然后立即尝试获取其测量的宽度。
你不能这样做。您必须首先将水平滚动视图添加到活动中现有的已绘制视图中,否则它还没有设置尺寸。
想一想如何知道WRAP_CONTENT在视图布局之前将尺寸设置为多少像素?如果将其添加到活动中现有的已布局视图中,那么WRAP_CONTENT实际上将转换为某个高度。
看起来你有一个循环 - horizontalScroll的维度取决于它的内容(WRAP_CONTENT),但内容的(LinearLayout)维度取决于horizontalScroll的维度。这根本不符合逻辑。也许至少尝试MATCH_PARENT的水平滚动视图的宽度尺寸。然后,确保在绘制视图之前不要查看尺寸。
答案 1 :(得分:1)
查看HorizontalScrollView的典型用法示例:
// read a view's width
private int viewWidth(View view) {
view.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
return view.getMeasuredWidth();
}
....
void getTableRowHeaderCellWidth(){
int tableAChildCount = ((TableRow)this.tableA.getChildAt(0)).getChildCount();
int tableBChildCount = ((TableRow)this.tableB.getChildAt(0)).getChildCount();;
for(int x=0; x<(tableAChildCount+tableBChildCount); x++){
if(x==0){
this.headerCellsWidth[x] = this.viewWidth(((TableRow)this.tableA.getChildAt(0)).getChildAt(x));
}else{
this.headerCellsWidth[x] = this.viewWidth(((TableRow)this.tableB.getChildAt(0)).getChildAt(x-1));
}
}
}
您还可以查看这个精彩教程的完整详细信息:The code of a Ninja。