LinearLayout的宽度和高度为零

Und*_*ech 0 layout android

我有问题,如果我尝试用LinearLayout.getWidth()和得到我的高度和宽度,LinearLayout.getHeight()我得到的int是0.

这是我的onCreat:

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    View mainView = getLayoutInflater().inflate(R.layout.activity_game, null);
    LinearLayout container = (LinearLayout) mainView.findViewById(R.id.container);
    view = new GameLayout(this, container.getWidth(), container.getHeight());
    container.addView(view);
    setContentView(mainView);       
    view.setOnClickListener(this);
}
Run Code Online (Sandbox Code Playgroud)

如果您有任何想法,我做错了什么,请帮忙.

我需要这个来获取布局的大小,因为我想要将我的位图放在每个设备上相同的百分比位置(例如每次都在屏幕的正中心).

编辑:

解:

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    View mainView = getLayoutInflater().inflate(R.layout.activity_game, null);
    final LinearLayout container = (LinearLayout) mainView.findViewById(R.id.container);
    mainView.post(new Runnable() 
    {
        @Override
        public void run() 
        {
            view = new GameLayout(GameActivity.this, container.getWidth(), container.getHeight());
            container.addView(view);
            view.setOnClickListener(GameActivity.this);
        }
    } );

    setContentView(mainView);   
}
Run Code Online (Sandbox Code Playgroud)

Bla*_*elt 9

它返回零,因为尚未计算布局的大小.要克服这种情况,您可以通过以下方式在主视图队列中发布Runnable:

  mainView.post(new Runnable() {
        @Override
        public void run() {
            view = new GameLayout(this, container.getWidth(), container.getHeight());
        } );
Run Code Online (Sandbox Code Playgroud)

runnable将作为mainview的队列的最后一个元素执行.那时,应该已经计算出容器的大小.

编辑.容器必须标记为final才能在内部runnable中访问