2017-12-01 13 views
0

내 앱에서는 현재 화면 너비에 따라 많은 UI를 만듭니다.
는 그 완벽하게 수행하는 도우미 메서드가 있습니다다중 창 활동은 현재 화면 너비를 얻습니다.

public static int getW() { 
    int width = ((WindowManager) appContext.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getWidth(); 
    return width; 
} 

을하지만 멀티 화면 내 활동 크기를 조정할 때,이 함수는 전화 화면 너비, 현재의하지를 반환합니다. 그리고 많은 UI가 중단됩니다.
나는 활동에서 onCreate()에서, 폭을 계산하는 메커니즘이 필요 (OnGlobalLayoutListener 도움이되지 것 - 초기화 많은이에서 onCreate에서 간단하게 수행되기 때문에)

답변

0

내 응용 프로그램 클래스에서 다음 방법으로 그것을 할 관리 :

public static Point getSize(){ 
    Point point = new Point(); 
    if (Build.VERSION.SDK_INT >= 21 && LifecycleHandler.getInstance().getCurrentActivity() != null){ 
     DisplayMetrics metrics = new DisplayMetrics(); 
     LifecycleHandler.getInstance().getCurrentActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics); 
     point.x = metrics.widthPixels; 
     point.y = metrics.heightPixels; 
    } else { 
     ((WindowManager) appContext.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getSize(point); 
    } 

    return point; 
} 
LifecycleHandler이

public class LifecycleHandler implements Application.ActivityLifecycleCallbacks { 

private static LifecycleHandler instance; 

public static synchronized LifecycleHandler getInstance() { 
    if (instance == null) { 
     instance = new LifecycleHandler(); 
    } 

    return instance; 
} 

private int resumed; 
private int paused; 
private int started; 
private int stopped; 

private WeakReference<Activity> activityRef; 

public Activity getCurrentActivity() { 
    if (activityRef != null) { 
     return activityRef.get(); 
    } 

    return null; 
} 

@Override 
public void onActivityCreated(Activity activity, Bundle savedInstanceState) { 
} 

@Override 
public void onActivityDestroyed(Activity activity) { 
} 

@Override 
public void onActivityResumed(Activity activity) { 
    ++resumed; 
    //Logging.log(TAG, "onActivityResumed application is in foreground: " + (resumed > paused)); 
    if (started > stopped && resumed > paused) { 

    } 

    activityRef = new WeakReference<>(activity); 
} 

@Override 
public void onActivityPaused(Activity activity) { 
    ++paused; 
    //Logging.log(TAG, "onActivityPaused application is in foreground: " + (resumed > paused)); 
} 

@Override 
public void onActivitySaveInstanceState(Activity activity, Bundle outState) { 
} 

@Override 
public void onActivityStarted(Activity activity) { 
    ++started; 
    //Logging.log(TAG, "onActivityStarted application is visible: " + (started > stopped)); 
} 

@Override 
public void onActivityStopped(Activity activity) { 
    ++stopped; 
    //Logging.log(TAG, "onActivityStopped application is visible: " + (started > stopped)); 

    if (isInBackground()) { 
    } 
} 

public boolean isInBackground() { 
    return started <= stopped && resumed <= paused; 
} 

}

입니다

그리고 우리는 생명을 등록해야 앱 클래스의 사이클 :

 registerActivityLifecycleCallbacks(LifecycleHandler.getInstance());