मैं अपनी गतिविधि के दृश्य आकार को कैसे जान सकता हूं?किसी गतिविधि पर दृश्यमान आकार कैसे प्राप्त करें?
मैं गतिविधि वास्तविक आकार पाने के लिए कोशिश कर रहा हूँ,
ऊंचाई getHeight()
और getWidth()
से चौड़ाई,
जो मुझे स्क्रीन पूर्ण आकार देता है नहीं।
मैं अपनी गतिविधि के दृश्य आकार को कैसे जान सकता हूं?किसी गतिविधि पर दृश्यमान आकार कैसे प्राप्त करें?
मैं गतिविधि वास्तविक आकार पाने के लिए कोशिश कर रहा हूँ,
ऊंचाई getHeight()
और getWidth()
से चौड़ाई,
जो मुझे स्क्रीन पूर्ण आकार देता है नहीं।
मुझे अपनी गतिविधि की सटीक ऊंचाई जानने का एक तरीका मिला है: यदि आपके पास शीर्षक पट्टी और टास्क बार के पीछे सभी उपलब्ध स्क्रीन भरने का एक दृश्य है, तो उस गतिविधि की वास्तविक ऊंचाई प्राप्त करने के लिए बस getBottom()
का उपयोग करें।
getBottom() क्या है? इस विधि में किस वर्ग है? –
कोई भी दृश्य: http://developer.android.com/reference/android/view/View.html#getBottom() यह माता-पिता के सापेक्ष है, यही कारण है कि आपको यह देखने की आवश्यकता है कि सभी उपलब्ध स्क्रीन भरें इस मामले में। – Mike
int ऊंचाई = this.getWindow()। GetDecorView()। GetBottom(); – kurt
I सोचें आप Activity.getWindow()
और Window.getDecorView()
पर देखना चाहते हैं, और इसकी चौड़ाई/ऊंचाई प्राप्त करें।
मैंने अपने रूट लेआउट का उपयोग करके ऐसा किया है, समस्या यह है कि आप अपनी जानकारी (चौड़ाई और ऊंचाई) को अपने ऑनक्रेट/ऑनस्टार्ट/ऑन रेस्यूम विधियों में पहली बार चलते समय प्राप्त नहीं कर सकते हैं।
उसके बाद किसी भी पल, आकार अपने जड़ लेआउट से प्राप्त किया जा सकता है (LinearLayout/FrameLayout/TableLayout/आदि), मेरे मामले में मैं उपयोग कर रहा था FrameLayout:
FrameLayout f = (FrameLayout) findViewById(R.id.layout_root);
Log.d(TAG, "width " + f.getMeasuredWidth());
Log.d(TAG, "height " + f.getMeasuredHeight());
या:
FrameLayout f = (FrameLayout) findViewById(R.id.layout_root);
Log.d(TAG, "width " + f.getRight());
Log.d(TAG, "height " + f.getBottom());
यहां से संपादित --------------------------------------------- -----------
मुझे इस जानकारी को ऑनक्रेटेड विधि पर प्राप्त करने का एक तरीका मिला, लेकिन केवल तभी यदि आपके पास एक और गतिविधि है । मेरे मामले में मेरे पास एक मुख्य गतिविधि है जो दूसरी गतिविधि को कॉल करती है।
दूसरी_एक्टिविटी को कॉल करने से पहले मुख्य_एक्टिविटी पर, एक नए इन्टेंट द्वारा, मैं दूसरी_एक्टिविटी के लिए अतिरिक्त जानकारी जोड़ सकता हूं।
int width = getIntent().getExtras().getInt("width");
int height = getIntent().getExtras().getInt("height");
वहाँ सरल है:
Intent i = new Intent(this, SecondActivity.class);
i.putExtra("width", f.getMeasuredWidth());
i.putExtra("height", f.getMeasuredHeight());
startActivity(i);
उसके बाद अपने दूसरे गतिविधि पर आपको लगता है कि कर अपने दूसरे गतिविधि के onCreate पद्धति पर यह जानकारी प्राप्त कर सकते हैं: यहाँ कोड आप पहली गतिविधि पर की जरूरत है सही होने का तरीका getDefaultSize
फ़ंक्शन का उपयोग करके आकार देखें।देखें पूरी गतिविधि पर फैले के मामले में, आप गतिविधि ग्राहक क्षेत्र आयाम तक ले जाने वाला दृष्टिकोण का उपयोग कर सकते हैं:
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
int viewWidth = getDefaultSize(getWidth(), widthMeasureSpec);
int viewHeight = getDefaultSize(getHeight(), heightMeasureSpec);
...
}
देखें पूरी गतिविधि पर विस्तार करने के लिए:
MyView testView = new MyView(this);
LinearLayout testViewGroup = new LinearLayout(this);
testView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT);
testViewGroup.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT);
testViewGroup.addView(testView);
setContentView(testViewGroup);
की ऊंचाई प्राप्त करें गतिविधि:
public static int getActivityHeight(Activity activity)
{
return activity.findViewById(android.R.id.content).getHeight();
}
प्राप्त करें गतिविधि की चौड़ाई
public static int getActivityWidth(Activity activity)
{
return activity.findViewById(android.R.id.content).getWidth();
}
आप DataBinding उपयोग कर रहे हैं (जो आप होना चाहिए), आप binding.getRoot().getHeight()
कॉल कर सकते हैं जहां binding
है अपने ViewDataBinding
DataBindingUtil.setContentView()
या अन्य ऐसे DataBindingUtil
विधि के साथ बनाया।
binding.getRoot().getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
binding.getRoot().getViewTreeObserver().removeOnGlobalLayoutListener(this);
int height = binding.getRoot().getHeight();
}
});
नोट आप OnGlobalLayoutListener निकालना पड़ वरना यह इस अपने लेआउट में हर बार कुछ भी परिवर्तनों को चलाने हो जाएगा कि: आप जब तक लेआउट आकार, जो आप इस तरह कर सकते हैं है प्रतीक्षा करनी होगी।
मैं समय की बचत और अधिक जवाब चाहते:
myActivity.getWindow().getDecorView().getHeight();
myActivity.getWindow().getDecorView().getWidth();
क्यों आप ऐसा करना चाहते हैं? ज्यादातर मामलों में यह जरूरी नहीं है और अधिकांश चीजों के लिए आपको इसकी आवश्यकता हो सकती है ताकि विभिन्न स्क्रीन आकारों को संभालने के लिए एंड्रॉइड के साथ आने वाली बेहतर तकनीकों के साथ किया जा सके। – Janusz
मुझे वास्तव में यह जानने की जरूरत है कि गतिविधि की चौड़ाई और ऊंचाई में कितनी पिक्सेल है। इसे कार्टोग्राफिक परिशुद्धता के साथ करना है। – Tsimmi
क्या आप मानचित्र को प्रदर्शित करने के लिए मानचित्रदृश्य या कस्टम व्यू का उपयोग कर रहे हैं? – Janusz