पिक्सल में ActionBar का आकार क्या है?


263

मुझे सही पृष्ठभूमि छवि को लागू करने के लिए पिक्सल में एक्शनबेर के सटीक आकार को जानने की आवश्यकता है।


जवाबों:


558

XML में ActionBar की ऊंचाई को पुनः प्राप्त करने के लिए, बस उपयोग करें

?android:attr/actionBarSize

या यदि आप एक ActionBarSherlock या AppCompat उपयोगकर्ता हैं, तो इसका उपयोग करें

?attr/actionBarSize

यदि आपको रनटाइम पर इस मान की आवश्यकता है, तो इसका उपयोग करें

final TypedArray styledAttributes = getContext().getTheme().obtainStyledAttributes(
                    new int[] { android.R.attr.actionBarSize });
mActionBarSize = (int) styledAttributes.getDimension(0, 0);
styledAttributes.recycle();

यदि आपको यह समझने की आवश्यकता है कि यह कहां परिभाषित किया गया है:

  1. विशेषता का नाम प्लेटफ़ॉर्म के /res/values/attrs.xml में परिभाषित किया गया है
  2. प्लेटफ़ॉर्म के theme.xml इस विशेषता को चुनता है और इसके लिए एक मान प्रदान करता है।
  3. चरण 2 में निर्दिष्ट मूल्य विभिन्न डिवाइस आकारों पर निर्भर करता है, जिन्हें प्लेटफ़ॉर्म में विभिन्न डिमेन्स.xml फ़ाइलों में परिभाषित किया गया है, अर्थात। कोर / res / res / values-sw600dp / dimens.xml

7
बहुत बढ़िया जवाब। मैं इस informations को खोदने का तरीका जानता हूं, लेकिन इस उत्तर को खोजने के लिए +1 बहुत तेज था। आपका जवाब भी एक महान संकेत है कि इस तरह की चीजों को कैसे खोजा जाए।
rekire

1
धन्यवाद। मैं @dimen/abc_action_bar_default_heightसीधे (ActionBarComapt) का उपयोग करने की कोशिश कर रहा था और इसने (mdpi डिवाइस पर) काम किया। लेकिन सैमसंग गैलेक्सी एस आठ पर इस मूल्य को प्राप्त करने की कोशिश ने मुझे गलत मूल्य लौटा दिया। ऐसा इसलिए है क्योंकि लैंडस्केप मोड में values-xlargeकिसी भी तरह से अधिक पसंद किया जाता values-landहै। इसके बजाय विशेषता का उल्लेख एक आकर्षण की तरह काम करता है।
एलेक्स सेमीनीक

4
@ AZ13 मैं जोड़ना चाहूंगा कि android.R.attr.actionBarSizeपूर्व 3.0 उपकरणों पर 0 आकार का समाधान होगा। तो जब ActionBarCompatएक का उपयोग करने के android.support.v7.appcompat.R.attr.actionBarSizeबजाय के लिए रहना होगा ।
ड्रयू

1
आदमी ने इसे पिक्सल में पूछा। मुझे लगता है कार्रवाई। मुझे मूल्य मिला 48dp। इसका मतलब है कि इसे पिक्सल में बदलने से मुझे xhdpi के लिए 96 पिक्सेल मिलते हैं।
मुहम्मद

"android.R.attr.actionBarSize" एंड्रॉइड वर्जन 2.3 में काम नहीं कर रहा है, लेकिन "R.attr.actionBarSize" एंड्रॉइड सभी वर्जन पर काम कर रहा है। सिर्फ "android..rr.actionBarSize" और आदि के बजाय "R.attr.actionBarSize" का उपयोग करें और आदि
Nathaniel जॉब्स

59

Android 3.2 के डी-संकलित स्रोतों से framework-res.apk, res/values/styles.xmlइसमें शामिल हैं:

<style name="Theme.Holo">
    <!-- ... -->
    <item name="actionBarSize">56.0dip</item>
    <!-- ... -->
</style>

3.0 और 3.1 समान प्रतीत होते हैं (कम से कम AOSP से) ...


1
परिदृश्य में एक्शन बार की विभिन्न ऊंचाई के बारे में क्या?
मैनफ्रेड मोजर

86
4.0+ पर: डिफ़ॉल्ट 48dp है, परिदृश्य 40dp है, sw600dp 56dp है
जेक व्हार्टन

19
यही कारण है कि आपको एंड्रॉइड का उपयोग करना चाहिए: एटीआर मूल्य और हार्डकोडेड मूल्य नहीं!
विक्रम बोदीचेरला

45

एक्शनबार की वास्तविक ऊंचाई प्राप्त करने के लिए, आपको actionBarSizeरनटाइम पर विशेषता को हल करना होगा ।

TypedValue tv = new TypedValue();
context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true);
int actionBarHeight = getResources().getDimensionPixelSize(tv.resourceId);

33

हनीकॉम्ब नमूनों में से एक को संदर्भित करता है ?android:attr/actionBarSize


3
हाँ, यहाँ समझाया गया है: developer.android.com/guide/topics/ui/…
पॉइंटर नल

3
यह उत्तर है यदि आपका मिनट sdk है> = 11, यदि आप मिनट 11 <हैं, तो सबसे अधिक संभावना है कि आप ABS का उपयोग कर रहे हैं, तो यह समाधान है: @ dimen / abs__action_bar_default_height
एडम

9
ABS में ?attr/actionBarSize(android नाम स्थान की कमी पर ध्यान दें) जो सभी API स्तरों पर काम करता है।
जेक व्हार्टन

21

मुझे पूर्व-आईसीएस संगतता ऐप में इन ऊंचाइयों को ठीक से दोहराने और फ्रेमवर्क कोर स्रोत में खोदने की आवश्यकता थी । ऊपर दिए गए दोनों उत्तर सही हैं।

यह मूल रूप से क्वालीफायर का उपयोग करने के लिए उबालता है। ऊंचाई "एक्शन_बार_डेफॉल्ट_हाइट" आयाम द्वारा परिभाषित की गई है

यह डिफ़ॉल्ट रूप से 48dip के लिए परिभाषित किया गया है। लेकिन -land के लिए यह 40dip है और sw600dp के लिए यह 56dip है।


17

यदि आप हाल ही में v7 appcompat समर्थन पैकेज से संगतता ActionBar का उपयोग कर रहे हैं, तो आप ऊंचाई का उपयोग कर प्राप्त कर सकते हैं

@dimen/abc_action_bar_default_height

प्रलेखन


16

नई v7 समर्थन लाइब्रेरी (21.0.0) के साथ नाम R.dimenबदलकर @ dimen / abc_action_bar_default_height_ सामग्री में बदल गया है ।

समर्थन लिब के पिछले संस्करण से अपग्रेड करते समय आपको एक्शनबार की ऊंचाई के रूप में उस मान का उपयोग करना चाहिए


1
उत्तम! यह सुनिश्चित करता है कि ?attr/actionBarSizeअगर कोई नियमित मैच कर रहा है तो उसकी पिटाई होगी ActionBar
कार्लिंडमार्क

9

यदि आप ActionBarSherlock का उपयोग कर रहे हैं, तो आप ऊंचाई प्राप्त कर सकते हैं

@dimen/abs__action_bar_default_height

abs__सीधे संसाधनों का उपयोग न करें ।
जेक व्हार्टन

2
@JakeWharton कृपया हमें बताएं कि इसके बजाय इसे सही तरीके से कैसे किया जाए।
जेस्पर बीआर

अपना स्वयं का आयाम बनाएं ताकि आप abs_ पर निर्भर न हों।
कोड किए गए


1
public int getActionBarHeight() {
    int actionBarHeight = 0;
    TypedValue tv = new TypedValue();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv,
                true))
            actionBarHeight = TypedValue.complexToDimensionPixelSize(
                    tv.data, getResources().getDisplayMetrics());
    } else {
        actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,
                getResources().getDisplayMetrics());
    }
    return actionBarHeight;
}

0

कक्षा सारांश आम तौर पर एक अच्छी जगह शुरू करने के लिए है। मुझे लगता है कि getHeight () पद्धति को पर्याप्त होना चाहिए।

संपादित करें:

यदि आपको चौड़ाई की आवश्यकता है, तो यह स्क्रीन की चौड़ाई (दाएं?) होनी चाहिए और इसे इस तरह इकट्ठा किया जा सकता है ।


2
अजीब - getHeight () शून्य में परिणाम।
यूजीन

1
मेरे विकास में, मैंने देखा कि यह onResume () में शून्य देता है। जब आपको वास्तव में इसकी आवश्यकता होती है तो एक सकारात्मक> 0 मान देता है।
तोस

@ गेट हाइट () के लिए युक्ति का कहना है कि यह एक्शनबार के लिए वर्तमान चौड़ाई लौटाता है, जो कि संभवत: 0 है जब दृश्य बनाया जाता है
डिस्प्ले का नाम

0

मेरे गैलेक्सी S4 वाले पर> 441dpi> 1080 x 1920> getResources () के साथ एक्शनबार की ऊँचाई प्राप्त कर रहा है। getDimensionPixelSize I को 144 पिक्सेल मिले।

सूत्र px = dp x (dpi / 160) का उपयोग करते हुए, मैं 441dpi का उपयोग कर रहा था, जबकि मेरा उपकरण
480xpi श्रेणी में है। इसलिए यह कहना कि परिणाम की पुष्टि करता है।


0

मैंने इस तरह से अपने लिए किया, यह सहायक विधि किसी के काम आनी चाहिए:

private static final int[] RES_IDS_ACTION_BAR_SIZE = {R.attr.actionBarSize};

/**
 * Calculates the Action Bar height in pixels.
 */
public static int calculateActionBarSize(Context context) {
    if (context == null) {
        return 0;
    }

    Resources.Theme curTheme = context.getTheme();
    if (curTheme == null) {
        return 0;
    }

    TypedArray att = curTheme.obtainStyledAttributes(RES_IDS_ACTION_BAR_SIZE);
    if (att == null) {
        return 0;
    }

    float size = att.getDimension(0, 0);
    att.recycle();
    return (int) size;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.