Determine if action bar is split

前端 未结 3 711
-上瘾入骨i
-上瘾入骨i 2021-01-11 23:31

I have a MapView with an action bar powered by ActionBarSherlock. The action bar is both split (on \"narrow\" screens) and overlayed / semi-transparent (android

相关标签:
3条回答
  • 2021-01-11 23:38

    I ran into the same problem. On phone devices in portrait mode the actionbar is split. So menu-items are in the top actionbar and the tabs in a second actionbar (tabbar) below. I just did not find any possible way to determine the height of the actionbar: to see what space is left on the screen before building my screen.

    So I did an assumption:

    • on small and normal screensize devices the actionbar is split in portrait mode
    • on large screensize devices (like Nexus 7) the actionbar is also split in portrait mode
    • on xlarge screensize devices (tablets) the actionbar is not split in portrait mode

    So I distinguish the different screensizes and created a bool resource

    <!-- res/values/booleans.xml -->
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <bool name="is_split_actionbar">false</bool>
    </resources>
    
    <!-- res/values-small-port/booleans.xml
         res/values-normal-port/booleans.xml
         res/values-large-port/booleans.xml -->
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <bool name="is_split_actionbar">true</bool>
    </resources>
    

    In the code I access the value like this:

    Boolean isSplit = getResources().getBoolean(R.bool.is_split_actionbar);
    

    To get the actionbar height in the onCreateView() method:

    TypedValue typedVal = new TypedValue();
    getActivity().getTheme().resolveAttribute(R.attr.actionBarSize, typedVal, true); // use android.R when not using ABS
    int actionBarHeight = getResources().getDimensionPixelSize(typedVal.resourceId);
    

    And double the height if the actionbar is split:

    if(isSplit) 
        actionBarHeight = actionBarHeight * 2;
    

    It is not an ideal solution, but for me this works.

    0 讨论(0)
  • 2021-01-11 23:38

    The bottom bar should match the height of the regular action bar. Thus, using ?android:attr/actionBarSize (or in ActionBarSherlock's case ?attr/actionBarSize) for the height in XML or getResources().getDimensionPixelSize(R.attr.actionBarSize) in code should suffice.

    edit:

    Er, on a second read of your question it seems more focused on also determining whether or not the split action bar exists.

    You may want to read these answers and the follow-up comments by Adam Powell, action bar guru:

    • https://stackoverflow.com/a/8280776/132047
    • https://stackoverflow.com/a/8381191/132047
    0 讨论(0)
  • 2021-01-11 23:55

    If you are using ActionBarSherlock you can look for the boolean value abs__split_action_bar_is_narrow

    Just create some static method where you can do

    return ResourcesCompat.getResources_getBoolean(context,
                                R.bool.abs__split_action_bar_is_narrow);
    

    you need to use the ResourcesCompat (from actionbarsherlock) class because pre 3.2 cant read folders with metrics (like values-sw480)

    0 讨论(0)
提交回复
热议问题