13

我想在我的 MainActivity 中使用 getWindowManager(),但我不想直接在里​​面写这个方法。

这是我的 MainActivity 代码

public class MainActivity extends Activity {
@Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  String d= new DisplayMessageActivity().getWeithAndHeight(d);
 }

这是我的 DisplayMessageActivity 代码

public class DisplayMessageActivity extends Activity {

@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Intent intent = getIntent();
    ....
    ....
    setContentView(textView);
}
public String getWeithAndHeight(String url) {  
    DisplayMetrics dm = new DisplayMetrics();  
    *getWindowManager().getDefaultDisplay().getMetrics(dm);*
    int width = dm.widthPixels;
    int height = dm.heightPixels;  
    String w=new String(""+width);
    String h=new String(""+height);
    url=url+"&23=w%3A"+w+"%20h%3A"+h+"%20d%3A"; 
    return url;
}  
}

我在 getWindowManager() 处的代码中断,请告诉我原因。非常感谢。

4

6 回答 6

30
public String getWeithAndHeight(Context context, String url) {  
    DisplayMetrics dm = new DisplayMetrics();  
    ((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(dm);
    //....
}   
于 2013-08-14T07:14:51.420 回答
5

为什么不创建静态方法:

public static String getWeithAndHeight(Activity activity, String url) {  
    DisplayMetrics dm = new DisplayMetrics();  
    activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
    int width = dm.widthPixels;
    int height = dm.heightPixels;  
    String w=new String(""+width);
    String h=new String(""+height);
    url=url+"&23=w%3A"+w+"%20h%3A"+h+"%20d%3A"; 
    return url;
} 

您的DisplayMessageActivity未成功创建。你不能仅仅创建新的活动对象来使用它的所有方法。

于 2013-08-14T07:14:42.840 回答
5

如果您使用的是 Kotlin,此代码可能对您有所帮助:

    private fun getDeviceWidthAndHeight() {

        val metrics = DisplayMetrics()
        val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
        windowManager?.defaultDisplay?.getMetrics(metrics)
        viewWidth = metrics.widthPixels
        viewHeight = metrics.heightPixels
    }
于 2020-03-07T09:59:23.893 回答
4

在这里聚会为时已晚,发布答案,因为有人可能会从中受益。您可以使用这样的上下文将 WindowManager() 作为静态引用

  DisplayMetrics displayMetrics = new DisplayMetrics();
        WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        if (windowManager != null) {
            windowManager.getDefaultDisplay().getMetrics(displayMetrics);
        }

现在您可以使用显示矩阵来获取宽度、高度等

于 2018-12-11T16:53:16.240 回答
0

回答您的第一个问题“我想在 MainActivity 中使用 getWindowManager(),但我不想直接在其中编写此方法。” 你可以写BaseActivity extends Activity&在这里你可以定义代码

public String getWeithAndHeight(Context context, String url) {  
    DisplayMetrics dm = new DisplayMetrics();  
    ((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(dm);
    //....
} 

对于 DisplayMessageActivity 和 MainActivity,您可以使用 BaseActivity 进行扩展。

于 2013-08-14T07:20:21.630 回答
0

分两步:第一:扩展Activity类

class Example extends Activity

第二:使用这些行

DisplayMetrics displayMetrics = new DisplayMetrics();
WindowManager windowmanager = (WindowManager)getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
windowmanager.getDefaultDisplay().getMetrics(displayMetrics);
int deviceWidth = displayMetrics.widthPixels;
int deviceHeight = displayMetrics.heightPixels;
于 2018-03-02T16:59:48.183 回答