2010-06-17 10 views
24

मैं अपनी गतिविधि के दृश्य आकार को कैसे जान सकता हूं?किसी गतिविधि पर दृश्यमान आकार कैसे प्राप्त करें?

मैं गतिविधि वास्तविक आकार पाने के लिए कोशिश कर रहा हूँ,
ऊंचाई getHeight() और getWidth() से चौड़ाई,
जो मुझे स्क्रीन पूर्ण आकार देता है नहीं।

+1

क्यों आप ऐसा करना चाहते हैं? ज्यादातर मामलों में यह जरूरी नहीं है और अधिकांश चीजों के लिए आपको इसकी आवश्यकता हो सकती है ताकि विभिन्न स्क्रीन आकारों को संभालने के लिए एंड्रॉइड के साथ आने वाली बेहतर तकनीकों के साथ किया जा सके। – Janusz

+3

मुझे वास्तव में यह जानने की जरूरत है कि गतिविधि की चौड़ाई और ऊंचाई में कितनी पिक्सेल है। इसे कार्टोग्राफिक परिशुद्धता के साथ करना है। – Tsimmi

+0

क्या आप मानचित्र को प्रदर्शित करने के लिए मानचित्रदृश्य या कस्टम व्यू का उपयोग कर रहे हैं? – Janusz

उत्तर

11

मुझे अपनी गतिविधि की सटीक ऊंचाई जानने का एक तरीका मिला है: यदि आपके पास शीर्षक पट्टी और टास्क बार के पीछे सभी उपलब्ध स्क्रीन भरने का एक दृश्य है, तो उस गतिविधि की वास्तविक ऊंचाई प्राप्त करने के लिए बस getBottom() का उपयोग करें।

+0

getBottom() क्या है? इस विधि में किस वर्ग है? –

+0

कोई भी दृश्य: http://developer.android.com/reference/android/view/View.html#getBottom() यह माता-पिता के सापेक्ष है, यही कारण है कि आपको यह देखने की आवश्यकता है कि सभी उपलब्ध स्क्रीन भरें इस मामले में। – Mike

+0

int ऊंचाई = this.getWindow()। GetDecorView()। GetBottom(); – kurt

31

I सोचें आप Activity.getWindow() और Window.getDecorView() पर देखना चाहते हैं, और इसकी चौड़ाई/ऊंचाई प्राप्त करें।

+9

int ऊंचाई = this.getWindow()। GetDecorView()। GetHeight(); – fireydude

+1

मुझे अभी भी 0, अजीब मिलता है। – nomnom

+4

आप इसे बहुत जल्दी बुला रहे हैं, इसकी परक्रेट() के दौरान ऊंचाई नहीं है। – Tatarize

6

मैंने अपने रूट लेआउट का उपयोग करके ऐसा किया है, समस्या यह है कि आप अपनी जानकारी (चौड़ाई और ऊंचाई) को अपने ऑनक्रेट/ऑनस्टार्ट/ऑन रेस्यूम विधियों में पहली बार चलते समय प्राप्त नहीं कर सकते हैं।

उसके बाद किसी भी पल, आकार अपने जड़ लेआउट से प्राप्त किया जा सकता है (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"); 
2

वहाँ सरल है:

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); 
1

की ऊंचाई प्राप्त करें गतिविधि:

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(); 
} 
2

आप DataBinding उपयोग कर रहे हैं (जो आप होना चाहिए), आप binding.getRoot().getHeight() कॉल कर सकते हैं जहां binding है अपने ViewDataBindingDataBindingUtil.setContentView() या अन्य ऐसे DataBindingUtil विधि के साथ बनाया।

binding.getRoot().getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
     binding.getRoot().getViewTreeObserver().removeOnGlobalLayoutListener(this); 

     int height = binding.getRoot().getHeight(); 
    } 
}); 

नोट आप OnGlobalLayoutListener निकालना पड़ वरना यह इस अपने लेआउट में हर बार कुछ भी परिवर्तनों को चलाने हो जाएगा कि: आप जब तक लेआउट आकार, जो आप इस तरह कर सकते हैं है प्रतीक्षा करनी होगी।

0

मैं समय की बचत और अधिक जवाब चाहते:

myActivity.getWindow().getDecorView().getHeight(); 
myActivity.getWindow().getDecorView().getWidth(); 
संबंधित मुद्दे