2012-04-27 11 views
15

मैं एंड्रॉइड स्रोत कोड पर View पर काम कर रहा हूं। मैं सोच रहा था कि कैसे हम सेटअप कई gravities, एक कस्टम Viewप्रोग्राम देखने के गुरुत्वाकर्षण

को यह XML

<com.android.systemui.statusbar.policy.Clock 
     android:id="@+id/clock" 
     android:textAppearance="@style/TextAppearance.StatusBar.Clock" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:singleLine="true" 
     android:paddingLeft="6dip" 
     android:gravity="center_vertical|left" 
     /> 

जैसा कि आप देख सकते हैं है, डिफ़ॉल्ट गुरुत्वाकर्षण center_vertical है | छोड़ दिया है, तो मेरे जावा कोड इस

की तरह कुछ किया जाना चाहिए
View clock = mStatusBarView.findViewById(R.id.clock); 

    if (clock != null) { 
     SOMEHOW SET GRAVITY -> mCenterClock ? Gravity.CENTER : (Gravity.CENTER_VERTICAL | Gravity.LEFT); 
    } 

सेट ग्रेविटी विधि View पर काम नहीं करती है। तो डिफ़ॉल्ट रूप से चौड़ाई और ऊंचाई खोए बिना गुरुत्वाकर्षण स्थापित करने का कोई विकल्प है?

अग्रिम धन्यवाद।

+0

तुम सच में गुरुत्वाकर्षण चाहते हैं या आप layout_gravity चाहते करते हैं? – JRaymond

+0

एंड्रॉइड: गुरुत्वाकर्षण = "center_vertical | left", यह वह विशेषता है जिसे मैं बदलना चाहता हूं। तो मुझे लगता है कि सिर्फ गुरुत्वाकर्षण है? क्या मै गलत हु? – user809486

+0

नहीं, मैं समझता हूं, लेकिन अब अग्रवाल सही है: वास्तविक प्रकार का उपयोग करें, देखें नहीं, क्योंकि वास्तविक प्रकार सेटग्राइटी – JRaymond

उत्तर

31

com.android.systemui.statusbar.policy.Clock टेक्स्टव्यू को विस्तारित करता है बस इसे टेक्स्ट व्यू में डालें और गुरुत्वाकर्षण सेट करें।

TextView clock = (TextView) mStatusBarView.findViewById(R.id.clock); 
clock.setGravity(mCenterClock ? Gravity.CENTER : (Gravity.CENTER_VERTICAL | Gravity.LEFT)); 

रेफरी: Source code

+0

आप एक बार देख यहाँ https://github.com/AOKP/frameworks_base/blob/ics/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java और यहाँ https ले जा सका: //github.com/AOKP/frameworks_base/blob/ics/packages/SystemUI/res/layout/status_bar.xml ऐसा लगता है कि यह सबसे अच्छा तरीका है। मुझे लगता है कि आपका रास्ता काम नहीं कर रहा है क्योंकि एक रैखिक है। – user809486

+0

मैं एओकेपी स्रोत से कोड पोर्ट करके समाप्त हुआ, हालांकि आपका जवाब अधिक सटीक था।धन्यवाद। – user809486

2
com.android.systemui.statusbar.policy.Clock clock = (com.android.systemui.statusbar.policy.Clock)mStatusBarView.findViewById(R.id.clock); 

clock.setGravity(Gravity.CENTER_VERTICAL); 

ऊपर कोड कोशिश करते हैं और देखें घड़ी = mStatusBarView.findViewById (R.id.clock) को हटाने;

+0

पर प्रतिक्रिया दे सकता है या बस 'com.android.systemui.statusbar.policy.Clock' को अव्यवस्थित करने के लिए आयात करें आपका कोडबेस, यदि आप – JRaymond

7

क्या आपने कोशिश की है?

clock.setGravity(Gravity.CENTER | Gravity.CENTER_VERTICAL); 

संपादित करें:

जब से तुम एक सादे View के लिए setGravity उपयोग नहीं कर सकते, कुछ इस तरह करते हैं,

आप एक RelativeLayout का उपयोग करें और इस तरह एक नियम सेट कर सकते हैं ...

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
params.addRule(RelativeLayout.CENTER_HORIZONTAL|RelativeLayout.CENTER_IN_PARENT, clock.getId()); 
+0

हां पसंद करते हैं। इस दृश्य के लिए सेट ग्रेविटी विधि उपलब्ध नहीं है। तो यह – user809486

+0

संकलित नहीं करेगा क्लॉक एक निश्चित प्रकार का व्यू ग्रुप बढ़ाता है? या सिर्फ एक सामान्य दृश्य? यह एक समूह समूह, जैसे LinearLayout को विस्तारित करने के लिए और अधिक समझ सकता है। – ootinii

+0

@ user809486 मैंने अपना जवाब संपादित कर लिया है कृपया इसे जांचें ... –