2012-04-27 7 views
15

私はAndroidソースコードでViewに取り組んでいます。ので、私のJavaコードは、このプログラムの重力をプログラムで設定します

のようなものである必要があり、左|私は、カスタム View

にこれは見ての通り、デフォルトの重力がcenter_verticalある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" 
     /> 

で、どのように我々のセットアップ複数の比重することができます思っていました

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

+0

android:gravity = "center_vertical | left"これは私が変更したい属性です。だから私は重力ですか?私が間違っている? – user809486

+0

いいえ、私は理解していますが、Agarwalは正しいです。実際のタイプは、実際のタイプがsetGravityに応答する可能性が高いため、実際のタイプを使用してください。 – JRaymond

答えて

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 のように思えます。私はあなたの方法は、linearLayoutであるため動作していないと思う。 – user809486

+0

私はAOKPソースからコードを移植することになりましたが、あなたの答えはより正確でした。ありがとう。 – 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); 

上記のコードを試して、View clock = 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

はい。このビューではsetGravityメソッドを使用できません。だから、コンパイルされません – user809486

+0

クロックは、特定のタイプのビューグループを拡張しますか?または単に一般的なビューですか? LinearLayoutなどのビューグループを拡張する方が意味があります。 – ootinii

+0

@ user809486私は自分の答えを編集しました。それをチェックしてください... –

関連する問題