위젯에 대해 Layout1과 Layout2의 두 가지 레이아웃이 있다고 가정 해 보겠습니다. 위젯의 기본 설정은 Layout1이지만 사용자가 위젯을 원하는 레이아웃 인 을 선택할 수 있습니다. 따라서 사용자가 Layout2로 변경하면 프로그래밍 방식으로 레이아웃을 Layout2로 변경하는 방법은 무엇입니까?프로그래밍 방식으로 위젯 레이아웃 변경하기
활동과 마찬가지로 위젯을위한 setContentView 메소드가 없습니다.
감사합니다.
위젯에 대해 Layout1과 Layout2의 두 가지 레이아웃이 있다고 가정 해 보겠습니다. 위젯의 기본 설정은 Layout1이지만 사용자가 위젯을 원하는 레이아웃 인 을 선택할 수 있습니다. 따라서 사용자가 Layout2로 변경하면 프로그래밍 방식으로 레이아웃을 Layout2로 변경하는 방법은 무엇입니까?프로그래밍 방식으로 위젯 레이아웃 변경하기
활동과 마찬가지로 위젯을위한 setContentView 메소드가 없습니다.
감사합니다.
리모트 뷰를 빌드 할 때 레이아웃을 선택해야합니다. 내 위젯 코드에서 :
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);
}
감사합니다. 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);
. 죄송합니다, 실수로 코드에서 복사 할 때 몇 줄을 마주 쳤습니다. 그걸 고쳤다. –
@YoniSamlan 내가 성공적으로 레이아웃을 변경했지만 레이아웃 변경 후 위젯이 작동하지 않습니다. – Prashant09
@ Prashant09 swith 케이스를 사용합니다. – Ranjit
그래서 내가 필요로하는 layoutID입니까? 나는 updateAppWidget 메서드가 그것을 사용하지 않는다는 것을 알아 차렸다. –
미안 해요 - 나는 선을 놓쳤습니다; 그것을 고쳤다. 필요한 것은 패키지 이름과 레이아웃 ID를 가진 새로운 RemoteView를 updateAppWidget에 전달하는 것입니다. –