我想能够在Android中获取屏幕高度和宽度
问题描述:
我想要获得屏幕宽度和高度,以便我可以使按钮在屏幕上随机移动,当我单击它时。我想能够在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
三江源,你可以提供任何帮助。
答
您在致电super.onCreate(Bundle)
之前致电getResources()
。您必须在onCreate()
之后致电getResources()
。将你的代码onCreate
或onStart
:
@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;
}
+0
这工作。谢谢你:) – user3307598
答
试试这个里面onCreate
:
DisplayMetrics display = this.getResources().getDisplayMetrics();
int width = display.widthPixels;
int height = display.heightPixels
答
您可以使用代码,以便无需重,直到你的布局得到完全呈现。
Display display = context.getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int height = size.y;
int width = size.x;
但在实践中AbsoluteLayout已被弃用,它不是好的定位使用绝对定位可能不会给相同的用户界面的感觉由专家建议所有devices.Other选项孩子的方式是RelativeLayout的。
[以像素为单位获取屏幕尺寸(可能的重复http://stackoverflow.com/questions/1016896/get-screen-dimensions-in-pixels找到AbsoluteLayout的缺点) – Varun