我希望能够在Android中获得屏幕高度和宽度

时间:2016-11-22 23:16:39

标签: java android

我正在尝试获取屏幕宽度和高度,这样当我点击它时,我可以在屏幕上随机移动按钮。

我到目前为止的代码:     公共类MainActivity扩展了AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

DisplayMetrics display = this.getResources().getDisplayMetrics();
int width = display.widthPixels;
int height = display.heightPixels;

public void moveMe(View view)
{
    Button myButton = (Button) findViewById(R.id.my_button);

    Random r = new Random();

    int x = (r.nextInt(width));
    int y = (r.nextInt(height));

    myButton.setX(x);
    myButton.setY(y);
}
}

XML是:

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<Button
    android:id="@+id/my_button"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:layout_x="0dp"
    android:layout_y="0dp"
    android:text="Yes"
    android:onClick="moveMe"/>
</AbsoluteLayout>

但是,当我启动应用程序时,它表示它已停止。

我在Android Studio中遇到的错误是:

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.test.test/com.example.test.test.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference

感谢您提供任何帮助。

3 个答案:

答案 0 :(得分:2)

您在调用getResources()之前呼叫super.onCreate(Bundle)。您必须在getResources()之后致电onCreate()。将代码移至onCreateonStart

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    DisplayMetrics display = getResources().getDisplayMetrics();
    int width = display.widthPixels;
    int height = display.heightPixels;
}

答案 1 :(得分:1)

onCreate内填写此内容:

DisplayMetrics display = this.getResources().getDisplayMetrics();

int width = display.widthPixels;

int height = display.heightPixels

答案 2 :(得分:1)

您可以使用代码,以便在布局完全呈现之前无需加权。

Display display = context.getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);
        int height = size.y;
        int width = size.x;

但实际上不推荐使用AbsoluteLayout,并且使用绝对定位定位Child的不好方法可能无法在所有设备中提供相同的用户界面感。专家建议的其他选项是RelativeLayout。

您可以在链接Absolute positioning pitfalls

找到AbsoluteLayout的缺点