2012-04-27 67 views
15

我正在通過Android源代碼在View上工作。我不知道我們怎麼能設置多個比重,到一個自定義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 |離開,所以我的Java代碼應該是這樣的

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

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

setGravity方法不適用於View。那麼是否有另一種設置重力的方式,默認情況下不會丟失寬度和高度?

在此先感謝。

+0

你真的想重心還是要layout_gravity? – JRaymond 2012-04-27 18:02:39

+0

android:gravity =「center_vertical | left」,這是我想改變的屬性。所以我猜只是重力?我錯了嗎? – user809486 2012-04-27 18:03:50

+0

不,我明白,現在 - 但Agarwal是正確的:使用實際類型,而不是查看,因爲實際類型可能會響應setGravity – JRaymond 2012-04-27 18:07:01

回答

31

由於com.android.systemui.statusbar.policy.Clock擴展了TextView,所以將它轉換爲TextView並設置重力。

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 2012-04-27 18:43:33

+0

我最終移植了AOKP源代碼,但您的答案更準確。謝謝。 – user809486 2012-04-27 19:04:28

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 2012-04-27 18:07:57

7

你試過了嗎?

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

編輯:

既然你不能使用setGravity對於普通View,做這樣的事情,

您可以使用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

是的。 setGravity方法不適用於此視圖。所以它不會編譯 – user809486 2012-04-27 18:06:27

+0

時鐘擴展某種類型的視圖組?或者只是一個通用的觀點?擴展視圖組可能更有意義,例如LinearLayout。 – ootinii 2012-04-27 18:11:40

+0

@ user809486我已編輯我的答案,請檢查它... – 2012-04-27 18:17:48

相關問題