视图的getWidth()和getHL.8()返回0

视图的getWidth()和getHL.8()返回0

我正在动态地创建我的Android项目中的所有元素。我试图得到一个按钮的宽度和高度,以便我可以旋转按钮周围。我只是想学习如何使用Android语言。但是,它返回0。

我做了一些研究,我发现它需要在其他地方做,而不是在onCreate()方法。如果有人能给我举个如何做的例子,那就太好了。

以下是我的当前代码:

package com.animation;import android.app.Activity;import android.os.Bundle;import android.view.animation.Animation;import android.view.
animation.LinearInterpolator;import android.view.animation.RotateAnimation;import android.widget.Button;import android.widget.LinearLayout;
public class AnimateScreen extends Activity {//Called when the activity is first created.@Overridepublic void onCreate
(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    LinearLayout ll = new LinearLayout(this);

    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, 
    LinearLayout.LayoutParams.WRAP_CONTENT);
    layoutParams.setMargins(30, 20, 30, 0);

    Button bt = new Button(this);
    bt.setText(String.valueOf(bt.getWidth()));

    RotateAnimation ra = new RotateAnimation(0,360,bt.getWidth() / 2,bt.getHeight() / 2);
    ra.setDuration(3000L);
    ra.setRepeatMode(Animation.RESTART);
    ra.setRepeatCount(Animation.INFINITE);
    ra.setInterpolator(new LinearInterpolator());

    bt.startAnimation(ra);

    ll.addView(bt,layoutParams);

    setContentView(ll);}

任何帮助都是非常感谢的。


POPMUISE
浏览 645回答 4
4回答

回首忆惘然

我们可以用@Override  public void onWindowFocusChanged(boolean hasFocus) {   super.onWindowFocusChanged(hasFocus);   //Here you can get the size!  }

汪汪一只猫

我使用了这个解决方案,我认为这个解决方案比onWindowFocusChanged()更好。如果您打开一个对话框,然后旋转电话,只有当用户关闭对话框时,才会调用onWindowFocusChanged):    yourView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {         @Override         public void onGlobalLayout() {             // Ensure you call it only once :             yourView.getViewTreeObserver().removeGlobalOnLayoutListener(this);             // Here you can get the size :)         }     });编辑:随着RemoveGlobalOnLayoutListener被废弃,您现在应该这样做:@SuppressLint("NewApi")@SuppressWarnings("deprecation")@Overridepublic void onGlobalLayout() {     // Ensure you call it only once :     if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {         yourView.getViewTreeObserver().removeOnGlobalLayoutListener(this);     }     else {         yourView.getViewTreeObserver().removeGlobalOnLayoutListener(this);     }     // Here you can get the size :)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android
Java