如何获得视图的高度和宽度?

时间:2014-01-17 12:18:27

标签: android view width

如何在当前活动中获取视图(属于另一个活动)视图的高度和宽度。 例如。在活动中有一个按钮,我必须在其id的帮助下获得活动二中的按钮属性。 (我考虑过视图,因为它可以是ImageView,TextView,WebView或其他任何东西)。

这里我粘贴了我尝试过的代码。

公共类SecAct扩展了Activity {

ArrayList<Integer> butList1;
RelativeLayout help;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_two);
    help = (RelativeLayout)findViewById(R.id.helplay);
    createWidgets();
}

private void createWidgets() {
    // TODO Auto-generated method stub
    butList1=MainActivity.butList;
    int a=butList1.get(0);
    View v=(View)(findViewById(a));
    int width=v.getWidth();
    int height=v.getHeight();
    help.addView(v);
    System.out.println("id is "+ width);
}

public void close(View v){
    finish();
}

}

我能够获得a的值,但是我无法获得v(View)的属性,即height,width或id e.t.c.我得到一个空指针异常。

3 个答案:

答案 0 :(得分:1)

首先从视图的活动中获取上下文,例如:

public static Context con;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_one);
    con = this;
}

然后,在另一项活动中:

Context context = FIRST_ACTIVITY.con;
Activity firstActivy = (Activity) context;
ViewGroup firstActivityView = firstActivy.getWindow().getDecorView().findViewById(android.R.id.content);
View DISIRED_VIEW = firstActivityView.findViewById(R.id.DISIRED_VIEW_ID);

最后,获取宽度和高度:

int width = DISIRED_VIEW.getWidth();
int height = DISIRED_VIEW .getHeight();

也许这些值(宽度和高度)可以是0,所以你必须这样做:

final int width, height;
DISIRED_VIEW.post(new Runnable() {

    @Override
    public void run() {
        width = DISIRED_VIEW.getWidth();
        height = DISIRED_VIEW.getHeight();
    }
});

答案 1 :(得分:0)

尝试getMeasuredHeight()方法

答案 2 :(得分:0)

由于您尚未初始化 ArrayList butList1 ,因此您将获得空指针异常。初始化它并向其添加项目,然后使用它。像这样 -

butList1 = new ArrayList<Integer>();
butList1.add(findviewById(R.id.button_id));