2012-04-27 12 views
15

Sto lavorando su un codice sorgente View su Android. Mi chiedevo come possiamo impostare più pesi, una consuetudine ViewImposta gravità di una vista a livello di programmazione

Questa è l'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" 
     /> 

Come si vede, la gravità di default è center_vertical | sinistra, quindi il mio codice Java dovrebbe essere qualcosa di simile

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

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

metodo setGravity non funziona su View. Quindi esiste un'alternativa per impostare la gravità senza perdere la larghezza e l'altezza di default ?.

Grazie in anticipo.

+0

non si vuole veramente la gravità o vuoi layout_gravity? – JRaymond

+0

android: gravità = "center_vertical | left", questo è l'attributo che voglio cambiare. Quindi immagino sia solo la gravità? ho sbagliato? – user809486

+0

no, ho capito, ora - ma Agarwal ha ragione: usa il tipo effettivo, non Visualizza, poiché il tipo effettivo probabilmente risponderà a setGravity – JRaymond

risposta

31

Poiché com.android.systemui.statusbar.policy.Clock estende TextView, basta lanciarlo su TextView e impostare la gravità.

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

Rif: Source code

+0

Potrebbe dare uno sguardo qui https://github.com/AOKP/frameworks_base/blob/ics/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java e qui https: //github.com/AOKP/frameworks_base/blob/ics/packages/SystemUI/res/layout/status_bar.xml Sembra il modo migliore. Penso che il tuo modo non funzioni perché è un lineareLayout. – user809486

+0

Ho finito con il porting del codice dalla sorgente AOKP, tuttavia la tua risposta è stata più accurata.Grazie. – 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); 

provare il codice qui sopra e rimuovere Vista orologio = mStatusBarView.findViewById (R.id.clock);

+0

O semplicemente importare 'com.android.systemui.statusbar.policy.Clock' per non ingombrare il tuo codice base, se preferisci – JRaymond

7

Hai provato?

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

Edit:

Dal momento che non è possibile utilizzare setGravity per una pianura View, fare qualcosa di simile,

è possibile utilizzare un RelativeLayout e impostare una regola come questa ...

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

Sì. il metodo setGravity non è disponibile per questa vista. Quindi non compila – user809486

+0

Clock estende un certo tipo di viewgroup? O solo una visione generica? Potrebbe essere più sensato estendere un viewgroup, come LinearLayout. – ootinii

+0

@ user809486 Ho modificato la mia risposta si prega di controllare ... –

Problemi correlati