2011-12-06 12 views
6

मैं एक कस्टम व्यू ग्रुप बनाने की कोशिश कर रहा हूं, और मैं इसे पूर्ण स्क्रीन एप्लिकेशन के साथ उपयोग करना चाहता हूं। मैं शीर्षक पट्टी को छिपाने के लिए "requestWindowFeature (Window.FEATURE_NO_TITLE)" का उपयोग कर रहा हूं। शीर्षक पट्टी नहीं दिख रही है, लेकिन यह अभी भी खिड़की के शीर्ष पर जगह ले रही है।एंड्रॉइड: कस्टम व्यू ग्रुप के साथ FEATURE_NO_TITLE का उपयोग विंडो के शीर्ष पर स्थान

Here is a picture of the problem

छवि के ऊपर निम्न कोड के साथ बनाया गया:

public class CustomLayoutTestActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     Button b = new Button(this); 
     b.setText("Hello"); 
     CustomLayout layout = new CustomLayout(this); 
     layout.addView(b); 
     setContentView(layout); 
    } 
} 

public class CustomLayout extends ViewGroup { 
    public CustomLayout(Context context) { 
     super(context); 
    } 
    public CustomLayout(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 
    public CustomLayout(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 
    @Override 
    protected void onLayout(boolean changed, int l, int t, int r, int b) { 
     Log.i("CustomLayout", "changed="+changed+" l="+l+" t="+t+" r="+r+" b="+b); 
     final int childCount = getChildCount(); 
     for (int i = 0; i < childCount; ++i) { 
      final View v = getChildAt(i); 
      v.layout(l, t, r, b); 
     } 
    } 
} 

(The full Eclipse project is here)

यह देखने के लिए कि यह Android है कि के लिए इस स्थान दिया जाता है दिलचस्प है मेरी कस्टम लेआउट। मैं कस्टमलायआउट को अपनी गतिविधि के रूट लेआउट के रूप में सेट कर रहा हूं। "ऑनलाउट" में लॉग इन में "टी = 25" प्राप्त हो रहा है, और यही वह है जो मेरे लेआउट को दबा रहा है। मुझे नहीं पता कि मैं क्या गलत कर रहा हूं जो एंड्रॉइड को "टी = 25" बनाता है (जो कि शीर्षक पट्टी की बिल्कुल ऊंचाई है)।

मैं एंड्रॉइड एसडीके 2.1 में यह कोड चला रहा हूं, लेकिन मैं एंड्रॉइड 2.2 में भी होता हूं।


संपादित: यदि मैं कुछ डिफ़ॉल्ट लेआउट (जैसे LinearLayout के रूप में) के लिए CustomLayout वर्ग बदलने के लिए, अंतरिक्ष गायब हो जाता है। बेशक, एंड्रॉइड एसडीके के डिफ़ॉल्ट लेआउट उस लेआउट को नहीं बनाते हैं जिसे मैं बनाने की कोशिश कर रहा हूं, इसलिए मैं एक बना रहा हूं।

हालांकि जो लेआउट मैं बना रहा हूं वह कुछ जटिल है, यह मेरा सबसे छोटा कोड है जो मैं अपने लेआउट के साथ समस्या को पुन: उत्पन्न कर सकता हूं।

उत्तर

3

यह एक पूर्ण जवाब नहीं है, लेकिन इस बीच में आप एक <FrameLayout />

इसके अलावा में अपने कस्टम लेआउट लपेटकर द्वारा समस्या को हल करने सकते हैं, यह देखते हुए कि अपने लेआउट स्क्रीन के नीचे से परे फैली हुई लायक है। इसे टाइटल बार ऊंचाई (मेरे एमुलेटर में 38 पिक्सल) द्वारा स्थानांतरित किया गया है

संपादित करें: समझ गया। onLayout() (और संबंधित लेआउट() विधि) निर्दिष्ट करें कि समन्वय स्क्रीन मूल के सापेक्ष नहीं हैं, वे माता-पिता (http://developer.android.com/reference/android/view/View.html#layout%28int,%20int,%20int,%20int%29) के सापेक्ष हैं। तो सिस्टम आपको बता रहा है कि आप रिश्तेदार निर्देशांक (0, 38) पर हैं, और आप इसे अपने बच्चे को पास करते समय जोड़ रहे हैं, जिसका अर्थ है कि आप कह रहे हैं कि आपका बच्चा स्क्रीन निर्देशांक पर है (0, 76), अंतर का कारण बनता है।

क्या आप वास्तव में क्या करना चाहते हैं यह है:

v.layout(0, 0, r - l, b - t); 

वह उसी चौड़ाई और अपने दृश्य के रूप में ऊंचाई के साथ अपने बच्चे दृश्य अपने दृश्य के ऊपर बाईं ओर के साथ गठबंधन किया, डाल देंगे।

+0

करने के लिए android:layout_gravity="top" जोड़कर तय धन्यवाद, @Hounshell। मैं माता-पिता के सापेक्ष समन्वय प्रणाली के बारे में दस्तावेज़ों पर इस बिंदु को चूक गया। यह एक तस्वीर है जिसे मैं प्राप्त करना चाहता हूं (आपकी टिप्पणी का परिणाम): [लिंक] (http://i.imgur.com/FIOIG) – lgfischer

0

मैं 2.2

में एक FrameLayout के साथ एक ही मुद्दा था मैं FrameLayout

संबंधित मुद्दे