在构建活动期间获取宽度

时间:2012-02-07 21:37:15

标签: android android-layout

我有一个问题,我似乎无法弄清楚该怎么做。 我是Android的新手,但我有使用Java的经验。

在onCreate(bundle),onPostCreate(bundle)或任何其他类似的方法中,我无法获得View的正确宽度。它返回0.我还为调试目的做了一个简单的按钮,该按钮返回正确的值。

如何在onCreate方法之后调用获取View宽度的方法? 如果那是不可能的,那么解决方法是什么?

提前致谢,

Gerralt

3 个答案:

答案 0 :(得分:2)

问题是因为,您在开始活动时尝试找出宽度。 但是在这个位置上,您的视图的实际转换不会发生。 Android提供了一个特殊的回调来查找所有单个视图的宽度和高度。要访问它,您必须覆盖onWindowFoucsChanged()方法。这是一个样本,

@Override 
public void onWindowFocusChanged(boolean hasFocus) 
{ 
     // TODO Auto-generated method stub 
     super.onWindowFocusChanged(hasFocus);
     System.out.println("...Height..."+textview.getMeasuredWidth()); 
}

此行textview.getMeasuredWidth()可帮助您在运行时查找textView的实际宽度。同样,您可以使用此方法找到任何视图的宽度和高度。

答案 1 :(得分:0)

正如我想的那样,你处于onCreate(Bundle)方法:

public void onCreate(Bundle xxx) {
  super(xxx);

  // init some stuff here

  setContentView(R.layout.my_layout);

  // from THIS point you can get sizes of Views
}

对不起,如果我错了,但在我的项目上它有效。好吧,我不得不说我经常使用 自定义视图和使用大小不在我的活动代码中,而是在视图代码中。

答案 2 :(得分:0)

这是onWindowFocusChanged(),如下所示:

@Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
            if(hasFocus && llfullscreen!=null){
        int layoutHeight = llfullscreen.getHeight(); 
                ViewGroup.LayoutParams params = lv.getLayoutParams();
        params.height = lv/2; //Set to half the screens size
        this.lv.setLayoutParams(params);
        this.lv.invalidate();
             }
    }