जवाबों:
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();
यदि आपको यह समझने की आवश्यकता है कि यह कहां परिभाषित किया गया है:
@dimen/abc_action_bar_default_height
सीधे (ActionBarComapt) का उपयोग करने की कोशिश कर रहा था और इसने (mdpi डिवाइस पर) काम किया। लेकिन सैमसंग गैलेक्सी एस आठ पर इस मूल्य को प्राप्त करने की कोशिश ने मुझे गलत मूल्य लौटा दिया। ऐसा इसलिए है क्योंकि लैंडस्केप मोड में values-xlarge
किसी भी तरह से अधिक पसंद किया जाता values-land
है। इसके बजाय विशेषता का उल्लेख एक आकर्षण की तरह काम करता है।
android.R.attr.actionBarSize
पूर्व 3.0 उपकरणों पर 0 आकार का समाधान होगा। तो जब ActionBarCompat
एक का उपयोग करने के android.support.v7.appcompat.R.attr.actionBarSize
बजाय के लिए रहना होगा ।
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 से) ...
एक्शनबार की वास्तविक ऊंचाई प्राप्त करने के लिए, आपको actionBarSize
रनटाइम पर विशेषता को हल करना होगा ।
TypedValue tv = new TypedValue();
context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true);
int actionBarHeight = getResources().getDimensionPixelSize(tv.resourceId);
हनीकॉम्ब नमूनों में से एक को संदर्भित करता है ?android:attr/actionBarSize
?attr/actionBarSize
(android नाम स्थान की कमी पर ध्यान दें) जो सभी API स्तरों पर काम करता है।
मुझे पूर्व-आईसीएस संगतता ऐप में इन ऊंचाइयों को ठीक से दोहराने और फ्रेमवर्क कोर स्रोत में खोदने की आवश्यकता थी । ऊपर दिए गए दोनों उत्तर सही हैं।
यह मूल रूप से क्वालीफायर का उपयोग करने के लिए उबालता है। ऊंचाई "एक्शन_बार_डेफॉल्ट_हाइट" आयाम द्वारा परिभाषित की गई है
यह डिफ़ॉल्ट रूप से 48dip के लिए परिभाषित किया गया है। लेकिन -land के लिए यह 40dip है और sw600dp के लिए यह 56dip है।
यदि आप हाल ही में v7 appcompat समर्थन पैकेज से संगतता ActionBar का उपयोग कर रहे हैं, तो आप ऊंचाई का उपयोग कर प्राप्त कर सकते हैं
@dimen/abc_action_bar_default_height
नई v7 समर्थन लाइब्रेरी (21.0.0) के साथ नाम R.dimen
बदलकर @ dimen / abc_action_bar_default_height_ सामग्री में बदल गया है ।
समर्थन लिब के पिछले संस्करण से अपग्रेड करते समय आपको एक्शनबार की ऊंचाई के रूप में उस मान का उपयोग करना चाहिए
?attr/actionBarSize
अगर कोई नियमित मैच कर रहा है तो उसकी पिटाई होगी ActionBar
।
यदि आप ActionBarSherlock का उपयोग कर रहे हैं, तो आप ऊंचाई प्राप्त कर सकते हैं
@dimen/abs__action_bar_default_height
abs__
सीधे संसाधनों का उपयोग न करें ।
@ AZ13 का जवाब अच्छा है, लेकिन एंड्रॉइड डिज़ाइन दिशानिर्देशों के अनुसार , एक्शनबार कम से कम 48dp उच्च होना चाहिए ।
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;
}
कक्षा सारांश आम तौर पर एक अच्छी जगह शुरू करने के लिए है। मुझे लगता है कि getHeight () पद्धति को पर्याप्त होना चाहिए।
संपादित करें:
यदि आपको चौड़ाई की आवश्यकता है, तो यह स्क्रीन की चौड़ाई (दाएं?) होनी चाहिए और इसे इस तरह इकट्ठा किया जा सकता है ।
मेरे गैलेक्सी S4 वाले पर> 441dpi> 1080 x 1920> getResources () के साथ एक्शनबार की ऊँचाई प्राप्त कर रहा है। getDimensionPixelSize I को 144 पिक्सेल मिले।
सूत्र px = dp x (dpi / 160) का उपयोग करते हुए, मैं 441dpi का उपयोग कर रहा था, जबकि मेरा उपकरण
480xpi श्रेणी में है। इसलिए यह कहना कि परिणाम की पुष्टि करता है।
मैंने इस तरह से अपने लिए किया, यह सहायक विधि किसी के काम आनी चाहिए:
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;
}