web-dev-qa-db-fra.com

Comment utiliser getWindowManager () avec un autre fichier Java

Je souhaite utiliser getWindowManager () dans MainActivity, mais je ne souhaite pas écrire cette méthode directement dans celle-ci.

Voici mon code 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);
 }

et voici mon code 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;
}  
}

mon code de rupture à getWindowManager (), s'il vous plaît dites-moi pourquoi. Merci beaucoup.

8
劉孟儒
public String getWeithAndHeight(Context context, String url) {  
    DisplayMetrics dm = new DisplayMetrics();  
    ((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(dm);
    //....
}   
21
Boris Mocialov

Pourquoi ne créez-vous pas une méthode statique?

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;
} 

Votre DisplayMessageActivity n'est pas créé correctement. Vous ne pouvez pas simplement créer un nouvel objet d'activité pour utiliser toutes ses méthodes.

5
Tishka17

Il est bien trop tard pour le parti, en publiant la réponse, car une personne pourrait en bénéficier. vous pouvez obtenir WindowManager () comme référence statique en utilisant le contexte comme ceci .

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

maintenant vous pouvez utiliser la matrice d'affichage pour obtenir la largeur, la hauteur, etc.

0
war_Hero

Réponse de votre première question "Je souhaite utiliser getWindowManager () dans MainActivity, mais je ne souhaite pas écrire cette méthode directement dans celle-ci." Vous pouvez écrire BaseActivity extends Activity & ici vous pouvez définir le code pour

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

Et pour DisplayMessageActivity & MainActivity, vous pouvez étendre avec BaseActivity.

0
chaitanya

Suivez deux étapes:

Premier:

étendre la classe d'activité

 **class Example extends Activity
 .....**

Seconde:

Utilisez le code ci-dessous:

**DisplayMetrics displayMetrics = new DisplayMetrics();
WindowManager windowmanager = (WindowManager)                                                                      getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
windowmanager.getDefaultDisplay().getMetrics(displayMetrics);
int deviceWidth = displayMetrics.widthPixels;
int deviceHeight = displayMetrics.heightPixels;**
0
dgamer