2012-04-27 20 views
15

Android Kaynak Kodunun üzerinde bir View üzerinde çalışıyorum. ayrıldı, yani benim Java kodu buBir Görünümün Programlı Olarak Yerçekiminin Ayarlanması

gibi bir şey olmalıdır | elimden biz kurulum birden ağırlıklar, özel bir View

Bu 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" 
     /> 

Gördüğünüz gibi ne kadar merak, varsayılan yerçekimi center_vertical olduğunu

View clock = mStatusBarView.findViewById(R.id.clock); 

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

setGravity yöntemi, View üzerinde çalışmaz. Yani, varsayılan olarak genişlik ve yüksekliği kaybetmeden yerçekimi ayarlama alternatifi var mı?

Şimdiden teşekkürler.

+0

gerçekten yerçekimi istiyorum yoksa layout_gravity istiyorsun do? – JRaymond

+0

android: gravity = "center_vertical | left", değiştirmek istediğim özellik bu. Yani sanırım yerçekimi mi? Yanlış mıyım? – user809486

+0

Hayır, şimdi anlıyorum - ama Agarwal haklı: asıl tip muhtemelen ViewGravity – JRaymond

cevap

31

com.android.systemui.statusbar.policy.Clock'dan bu yana TextView, onu bir TextView'a yayınlamaya ve yer çekimini ayarlamaya yönlendiriyor.

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

Ref: Source code

+0

Burada https://github.com/AOKP/frameworks_base/blob/ics/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java ve burada https Bir bakabilir miyim: //github.com/AOKP/frameworks_base/blob/ics/packages/SystemUI/res/layout/status_bar.xml En iyi yol gibi görünüyor. Bence yolun çalışmıyor, çünkü doğrusal bir hat. – user809486

+0

AOKP kaynağından kod taşıyarak sona erdim, ancak cevabınız daha doğruydu.Teşekkürler. – 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); 

yukarıdaki kodu denemek ve Görünüm saatini = mStatusBarView.findViewById (R.id.clock) kaldırmak;

+0

'a yanıt vereceğinden veya sadece "com.android.systemui.statusbar.policy.Clock" ifadesini karıştırmamak için gerçek türünü kullan Kod tabanınızı, – JRaymond

7

Denediniz mi?

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

Düzenleme:

Eğer düz View için setGravity kullanmak böyle bir şey yapmak mümkün olmadığından,

Sen ... Bir RelativeLayout kullanmak ve böyle bir kural belirleyerek

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

Evet tercih ederseniz. Bu Görünüm için setGravity yöntemi kullanılamaz. Yani – user809486

+0

derlemek değil Saat belirli bir tür görünüm grubu uzatır mı? Ya da sadece genel bir görünüm? LinearLayout gibi bir görünüm grubunu genişletmek daha mantıklı olabilir. – ootinii

+0

@ user809486 Cevabımı düzenledim lütfen kontrol et… –

İlgili konular