2009-12-07 8 views
9

위젯에 대해 Layout1과 Layout2의 두 가지 레이아웃이 있다고 가정 해 보겠습니다. 위젯의 기본 설정은 Layout1이지만 사용자가 위젯을 원하는 레이아웃 인 을 선택할 수 있습니다. 따라서 사용자가 Layout2로 변경하면 프로그래밍 방식으로 레이아웃을 Layout2로 변경하는 방법은 무엇입니까?프로그래밍 방식으로 위젯 레이아웃 변경하기

활동과 마찬가지로 위젯을위한 setContentView 메소드가 없습니다.

감사합니다.

답변

8

리모트 뷰를 빌드 할 때 레이아웃을 선택해야합니다. 내 위젯 코드에서 :

public static RemoteViews buildUpdate(Context context, String action) { 
    RemoteViews updateViews;    
    SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, 0); 
    String typeface = prefs.getString("typeface", "sans"); 
    int layoutId = R.layout.widget_sans; 
    if ("monospace".equals(typeface)){ 
     layoutId = R.layout.widget_mono; 
    } else if ("serif".equals(typeface)){ 
     layoutId = R.layout.widget_serif; 
    } 
    updateViews = new RemoteViews(context.getPackageName(), 
     layoutId); 
    //actually do things here 
    //then finally, return our remoteView 
    AppWidgetManager.getInstance(context).updateAppWidget(
     new ComponentName(context, FuzzyWidget.class), updateViews); 

} 
+0

그래서 내가 필요로하는 layoutID입니까? 나는 updateAppWidget 메서드가 그것을 사용하지 않는다는 것을 알아 차렸다. –

+0

미안 해요 - 나는 선을 놓쳤습니다; 그것을 고쳤다. 필요한 것은 패키지 이름과 레이아웃 ID를 가진 새로운 RemoteView를 updateAppWidget에 전달하는 것입니다. –

2

감사합니다. Yoni.

코드에 추가하고 싶습니다. RemoteViews 객체를 가져올 때 컨텍스트와 레이아웃 ID를 지정합니다. 여기에 표시 할 레이아웃을 설정하는 곳입니다. 예를 들어

...

RemoteViews views = null; 

if (1 == 1) 
     views = new RemoteViews(m_context.getPackageName(), R.layout.Layout1); 
else 
     views = new RemoteViews(m_context.getPackageName(), R.layout.Layout2); 

AppWidgetManager.getInstance(context).updateAppWidget(
    new ComponentName(context, FuzzyWidget.class), views); 
+2

. 죄송합니다, 실수로 코드에서 복사 할 때 몇 줄을 마주 쳤습니다. 그걸 고쳤다. –

+0

@YoniSamlan 내가 성공적으로 레이아웃을 변경했지만 레이아웃 변경 후 위젯이 작동하지 않습니다. – Prashant09

+0

@ Prashant09 swith 케이스를 사용합니다. – Ranjit

관련 문제