2012-04-27 8 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입니다

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에 응답 할 가능성이 높으므로 View가 아닌 ​​실제 형식을 사용하십시오. – 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); 

은 위의 코드를 시도하고보기 시계 = 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 내 대답을 편집 해주세요. 확인해주세요 ... –

관련 문제