উত্তর:
এক্সএমএলে অ্যাকশনবারের উচ্চতা পুনরুদ্ধার করতে, কেবল ব্যবহার করুন
?android:attr/actionBarSize
বা আপনি যদি অ্যাকশনবার্ল্লক বা অ্যাপকম্প্যাট ব্যবহারকারী হন তবে এটি ব্যবহার করুন
?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সরাসরি (অ্যাকশনবারকোম্যাপ্ট) ব্যবহার করার চেষ্টা করছিলাম এবং এটি (এমডিপিআই ডিভাইসে) কাজ করেছিল। তবে স্যামসাং গ্যালাক্সি এসআইআই এ এই মানটি পাওয়ার চেষ্টা করে আমাকে ভুল মূল্য ফিরিয়ে দিয়েছে। কারণ values-xlarge(কোনওভাবে) values-landল্যান্ডস্কেপ মোডের তুলনায় বেশি পছন্দ করা হয় । পরিবর্তে বৈশিষ্ট্য উল্লেখ করে একটি কবজ মত কাজ করে।
android.R.attr.actionBarSizeপ্রাক-3.0 ডিভাইসে 0 আকারে সমাধান হবে। সুতরাং ActionBarCompatএক ব্যবহার করার android.support.v7.appcompat.R.attr.actionBarSizeপরিবর্তে আটকে থাকবে ।
অ্যান্ড্রয়েড ৩.২ এর ডি-সংকলিত উত্স থেকে framework-res.apk, res/values/styles.xmlরয়েছে:
<style name="Theme.Holo">
<!-- ... -->
<item name="actionBarSize">56.0dip</item>
<!-- ... -->
</style>
3.0 এবং 3.1 একই (কমপক্ষে এওএসপি থেকে) বলে মনে হচ্ছে ...
অ্যাকশনবারের প্রকৃত উচ্চতা পেতে, আপনাকে রানটাইমগুলিতে বিশদটি সমাধান করতে হবে 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(অ্যান্ড্রয়েড নেমস্পেসের অভাব লক্ষ্য করুন) যা সমস্ত এপিআই স্তরে কাজ করে।
আমার পূর্ব-আইসিএস সামঞ্জস্য অ্যাপ্লিকেশনটিতে এই উচ্চতাগুলি যথাযথভাবে প্রতিলিপি করা এবং ফ্রেমওয়ার্ক কোর উত্সে খনন করা দরকার । উপরের উভয় উত্তর একরকম সঠিক।
এটি মূলত কোয়ালিফায়ার ব্যবহারের জন্য ফোটায়। উচ্চতাটি "ক্রিয়া_বার_ডিফল্ট_হাইট" মাত্রা দ্বারা সংজ্ঞায়িত করা হয়
এটি ডিফল্ট জন্য 48dip সংজ্ঞায়িত করা হয়। তবে -ল্যান্ডের জন্য এটি 40dip এবং sw600dp এর জন্য এটি 56 ডিপ।
আপনি যদি সাম্প্রতিক v7 অ্যাপকম্প্যাট সমর্থন প্যাকেজটি থেকে সামঞ্জস্যতা অ্যাকশনবারটি ব্যবহার করছেন তবে আপনি উচ্চতাটি ব্যবহার করে তা পেতে পারেন
@dimen/abc_action_bar_default_height
নতুন ভি 7 সমর্থন লাইব্রেরির সাথে (21.0.0) নামটি @ মাত্রা / অ্যাবসি_অ্যাকশন_বার_ডিফাল্ট_ইহাইট_ উপাদানেR.dimen পরিবর্তিত হয়েছে ।
সাপোর্ট লাইবের আগের সংস্করণ থেকে আপগ্রেড করার সময় আপনার সেই মানটি অ্যাকশনবারের উচ্চতা হিসাবে ব্যবহার করা উচিত
?attr/actionBarSizeযদি এক খুঁজছেন হয় একটি নিয়মিত মেলে ActionBar।
আপনি যদি অ্যাকশনবারারলক ব্যবহার করে থাকেন তবে আপনি উচ্চতাটি পেতে পারেন
@dimen/abs__action_bar_default_height
abs__প্রিফিক্সড সংস্থানগুলি সরাসরি ব্যবহার করবেন না ।
@ এজেড 13 এর উত্তরটি ভাল তবে অ্যান্ড্রয়েড ডিজাইনের নির্দেশিকা অনুসারে অ্যাকশনবারটি কমপক্ষে 48 ডিপি উচ্চ হওয়া উচিত ।
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 () পদ্ধতিটি যথেষ্ট হওয়া উচিত।
সম্পাদনা করুন:
আপনার প্রস্থের প্রয়োজন হলে এটি পর্দার প্রস্থ (ডান?) হওয়া উচিত এবং এটি এভাবে সংগ্রহ করা যেতে পারে ।
আমি নিজের জন্য এইভাবে করেছি, এই সহায়ক সহায়কটি কারও কাজে আসবে:
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;
}