2012-02-21 19 views
5

के स्क्रीन आकार का एंड्रॉइड 3.0 डिस्प्ले पर बैक और होम बटन के साथ एक नेविगेशन बार है। अब अगर मैं इसएंड्रॉइड 3.0 के बाद अन्य स्क्रीन अभिविन्यास

ClockLwp.ScreenHeight = getWindowManager().getDefaultDisplay().getHeight(); 
ClockLwp.ScreenWidth = getWindowManager().getDefaultDisplay().getWidth(); 
इस

getResources().getDisplayMetrics().widthPixels 
getResources().getDisplayMetrics().heightPixels 

की

की तरह स्क्रीन आकार मैं परिदृश्य और चित्र के लिए अलग मान मिलता है मिलता है। यहाँ एक उदाहरण मैं क्या मतलब है:

एसर Iconia A500 पोर्ट्रेट मोड: 800 x 1232 एसर Iconia A500 लैंडस्केप मोड: 1280 x 752

AFAIK इस तरह के एक नेविगेशन पट्टी के साथ सभी उपकरणों के लिए चला जाता है। (उदाहरण के लिए सैमसंग गैलेक्सी नेक्सस, गैलेक्सीटैब 10.1 इत्यादि)

अब मेरा सवाल है, अगर मैं पोर्ट्रेट मोड में हूं तो मुझे लैंडस्केप मोड के मूल्य और दूसरी तरफ कैसे मिल सकता है?

उत्तर

1

एंड्रॉइड 3 के बाद से कच्चे हेगथ ​​और चौड़ाई को पुनः प्राप्त करने के लिए सार्वजनिक एपीआई के साथ कोई रास्ता नहीं है। आप प्रतिबिंब के माध्यम से जा सकते हैं। GetRawHeigth/Width

+0

यह वास्तव में नहीं है

यहाँ बात यह है कि हम रोटेशन से पहले नेविगेशन पट्टी ऊंचाई की गणना करने के उपयोग कर रहे हैं कच्ची ऊंचाई एक चौड़ाई मैं चाहता हूँ। नेविगेशन बार ऊंचाई घटाकर, लेकिन अन्य अभिविन्यास के बाद यह चौड़ाई और ऊंचाई मान है। – Xazen

+0

कुछ गणित करें !!! – Blackbelt

+0

मुझे नहीं पता कि मैं नेविगेशन बार की ऊंचाई कैसे प्राप्त कर सकता हूं। (बैक और होम बटन युक्त, सुनिश्चित नहीं है कि इस बार को सही तरीके से कैसे कहा जाता है।) – Xazen

0

यहां समाधान है जो मेरे लिए काम करता है। मुझे असली स्क्रीन आकार मिला है और फिर नेविगेशन बार ऊंचाई घटाएं।

// get navigation bar height for landscape and portrait modes 
    Resources resources = activity.getResources(); 
    int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android"); 
    int resourceIdLandscape = resources.getIdentifier("navigation_bar_height_landscape", "dimen", "android"); 
    int portraitNavBarHeight = 0; 
    int landscapeNavBarHeight = 0; 

    boolean hasPermanentMenuKey = ViewConfiguration.get(activity).hasPermanentMenuKey(); 
    if (resourceId > 0 && !hasPermanentMenuKey) { 
     portraitNavBarHeight = resources.getDimensionPixelSize(resourceId); 
    } 

    if (resourceIdLandscape > 0 && !hasPermanentMenuKey) { 
     landscapeNavBarHeight = resources.getDimensionPixelSize(resourceIdLandscape); 
    } 

    // get real screen size 
    DisplayMetrics displayMetrics = new DisplayMetrics(); 
    WindowManager wm = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE); 
    Display disp = wm.getDefaultDisplay(); 

    int API_LEVEL = android.os.Build.VERSION.SDK_INT; 
    if (API_LEVEL >= 17) { 
     disp.getRealMetrics(displayMetrics); 
    } else { 
     disp.getMetrics(displayMetrics); 
    } 

    int width = displayMetrics.widthPixels; 
    int height = displayMetrics.heightPixels; 

    // size for orientation 
    int portraitHeight; 
    int portraitWidth; 
    int landscapeHeight; 
    int landscapeWidth; 

    if(width > height) { 
     portraitHeight = width - portraitNavBarHeight; 
     portraitWidth = height; 

     landscapeHeight = height - landscapeNavBarHeight; 
     landscapeNavBarHeight = width; 

    } else { 
     portraitHeight = height - portraitNavBarHeight; 
     portraitWidth = width; 

     landscapeHeight = width - landscapeNavBarHeight; 
     landscapeNavBarHeight = height; 
    } 

अपने एप्लिकेशन को स्थिति बार

public static int getStatusBarHeight(Context context) { 
    Resources resources = context.getResources(); 
    int resourceId = resources.getIdentifier("status_bar_height", "dimen", "android"); 
    if (resourceId > 0) { 
     return resources.getDimensionPixelSize(resourceId); 
    } 
    return 0; 
} 
0

संपादित करें (26 सितंबर 2014) है: मैं अपने पाठ पुनर्निर्मित एक पूरा जवाब को रोकने के लिए और सिर्फ दमित्री समाधान के लिए कोई टिप्पणी नहीं।

DisplayMetrics metrics = new DisplayMetrics(); 
mFragment.getActivity().getWindowManager().getDefaultDisplay() 
      .getMetrics(metrics); 

/* 
* We need to take system resources here to verify navigation 
* bar height. Application resources also contains navigation bar 
* height but this value is not valid for some devices e.g. Nexus 7 (2012)! 
*/ 
Resources appRes = getResources(); 
Resources sysRes = Resources.getSystem(); 
boolean landscapeMode = (metrics.widthPixels > metrics.heightPixels); 
/* Check if the device has navigation bar. There is no direct API for 
* that so we use some hacking that may not always work, 
* (see http://stackoverflow.com/questions/16092431/check-for-navigation-bar) 
* but this method should be enough for most devices. 
* TODO: Find a more consistent way. For our needs it is currently enough as we 
* support limited set of devices. 
*/ 
boolean hasNavigationBar = !ViewConfiguration.get(getContext()).hasPermanentMenuKey(); 
int navBarHeight = 0; 
int navBarHeightRotated = 0; 
if (hasNavigationBar) { 
    int barHeightDimId = 0; 
    int barHeightDimIdRotated = 0; 
    if (landscapeMode) { 
     barHeightDimId = sysRes.getIdentifier(
       "navigation_bar_height_landscape", "dimen", "android"); 
     barHeightDimIdRotated = sysRes.getIdentifier(
       "navigation_bar_height", "dimen", "android"); 
    } else { 
     barHeightDimIdRotated = sysRes.getIdentifier(
       "navigation_bar_height_landscape", "dimen", "android"); 
     barHeightDimId = sysRes.getIdentifier("navigation_bar_height", 
       "dimen", "android"); 
    } 
    if (barHeightDimId != 0) { 
     navBarHeight = appRes.getDimensionPixelSize(barHeightDimId); 
    } 
    if (barHeightDimIdRotated != 0) { 
     navBarHeightRotated = appRes 
       .getDimensionPixelSize(barHeightDimIdRotated); 
    } 
    NCLogs.i("MyApp", String.format("Android navigation bar height: %d (current), %d (after rotation)", navBarHeight, navBarHeightRotated)); 
} 

तो हम रोटेशन के बाद हमारे विचार चौड़ाई और ऊंचाई की गणना कर सकते हैं::

int realScreenHeight = metrics.heightPixels + navBarHeight; 

// We expect to not have decor views near the left or right borders 
int realScreenWidth = metrics.widthPixels; 

/* 
* Height of decor views: system status bar + any application addtional elements + 
* + system navigation bar 
*/ 
int decorHeightRotated = realScreenHeight - getHeight() - navBarHeight + navBarHeightRotated; 

int viewWidthRotated = realScreenHeight; 
int viewHeightRotated = (realScreenWidth - decorHeightRotated); 
NCLogs.i("MyApp", String.format("Width after rotation: %d, Height after rotation: %d", viewWidthRotated, viewHeightRotated)); 
संबंधित मुद्दे