2011-09-22 5 views
4

나는 안드로이드 개발의 초보자입니다. 현재, 버튼을 클릭하면 모바일의 배경 화면을 변경하는 작은 홈 화면 위젯을 만드는 중입니다. 설정 배경 화면은 정상적으로 작동하지만 클릭 가능한 작은 그림 (ImageView)을 만들어서이 설정 버튼을 표시하거나 숨길 수 있습니다.안드로이드 메인 스크린 위젯의 버튼 숨김/표시 방법

내 onClick 이벤트를 동일한 서비스에 첨부하기 위해 서비스에서 설정하고 PendingIntent를 사용하지만 표시 여부에 관계없이 버튼의 속성을 감지 할 수 없습니다.

따라서 ImageView에서 홈 화면 위젯의 버튼을 표시하거나 숨기려면 어떤 제안과 해결책이 있습니까? 사전에

감사합니다 ..

답변

12

mButton.setVisibility (View.GONE)를 사용하여 단추를 숨길 수 있습니다.

mButton.isShown()을 사용하여 부울 변수에서 단추의 가시성 상태를 확인할 수도 있습니다.

편집 :

를 들어

AppWidgetProvideronReceive()에서

,

 remoteViews.setViewVisibility(R.id.buttonId,View.INVISIBLE); 

을 편집 버튼을 숨기는 그래서

 remoteViews = new RemoteViews(context.getPackageName(), R.layout.yourwidgetlayout); 

    remoteViews.setViewVisibility(viewId, visibility); 

-2 : Kartik의 공동에 따르면을 mment,

샘플 코드 :

public class ButtonHideShowWidget extends AppWidgetProvider { 

    private static boolean status = false; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     super.onReceive(context, intent); 
     if (intent.getAction()==null) { 

      Bundle extras = intent.getExtras(); 
      if(extras!=null) { 

       remoteViews = new RemoteViews(context.getPackageName(), R.layout.your_widget_layout); 
       if(status){ 
        remoteViews.setViewVisibility(R.id.buttonId,View.INVISIBLE); 
        status = false; 
       }else{ 
        remoteViews.setViewVisibility(R.id.buttonId,View.VISIBLE); 
        status = true; 
       } 

       watchWidget = new ComponentName(context, ButtonHideShowWidget.class); 

       (AppWidgetManager.getInstance(context)).updateAppWidget(watchWidget, remoteViews); 
       //Toast.makeText(context, "Clicked "+status, 2000).show(); 
      } 
     } 
    } 
} 
+0

나는 또한 그것에 대해 생각하지만 RemoteView를 통해 전화하는 법을 모르겠다 – Fon

+0

편집 된 답변을 확인하십시오. – Hiral

+0

버튼의 현재 상태를 확인할 수 있습니까? remoteViews가 getViewVisibility를 허용하지 않는 것 같습니다. 많은 질문을해서 죄송합니다. – Fon

1

통화 setVisibility (View.Invisible); 사용자가 버튼을 클릭 한 후에 생성 된 버튼 객체의 도움으로

+0

죄송합니다. RemoteView에서 해당 버튼 객체에 어떻게 액세스 할 수 있습니까? – Fon

+0

나는 리모트 뷰에 대한 지식이 없어도 그것을 시도해 보거나 그것에 관련된 것을 공부하게한다. 그런 다음 나는 진짜 해결책을 말해 줄 것이다. – Rocker

+0

도와 줘서 고마워 ... 지금 일하고있어 – Fon

0
당신은 onReceive에서이 일을해서는 안
<pre><code> 
    // To remove button 
    Button button = (Button) findViewById(R.id.button); 
    button.setVisibility(View.GONE); 

    // To transparent button 
    Button button = (Button) findViewById(R.id.button); 
    button.setVisibility(View.INVISIBLE); 
</code></pre> 
+0

이 답변은 허용되는 답변의 작은 버전입니다. – scenia

-1
public class Showing extends AppWidgetProvider { 

    private static boolean status = false; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     super.onReceive(context, intent); 
     if (intent.getAction()==null) { 
      Bundle extras = intent.getExtras(); 
      if(extras!=null) { 
       remoteViews = new RemoteViews(context.getPackageName(), R.layout.your_widget_layout); 
       if(status){ 
        remoteViews.setViewVisibility(R.id.buttonId,View.INVISIBLE); 
        status = false; 
       }else{ 
        remoteViews.setViewVisibility(R.id.buttonId,View.VISIBLE); 
        status = true; 
       } 
       watchWidget = new ComponentName(context, ButtonHideShowWidget.class); 
       (AppWidgetManager.getInstance(context)).updateAppWidget(watchWidget, remoteViews); 
       //Toast.makeText(context, "Clicked "+status, 2000).show(); 
      } 
      } 
     } 
    } 
0

(문맥, 의도) 공식 문서에 언급 된 방법은

이 호출된다 모든 브로드 캐스트마다 그리고 위의 각 콜백 메소드가 있기 전에. 기본 AppWidgetProvider 구현은 모든 App 위젯 브로드 캐스트를 필터링하고 위의 메소드를 적절하게 호출하기 때문에 일반적으로이 메소드를 구현할 필요가 없습니다.

onAppWidgetOptionsChanged()에서 수행해야합니다. official docs.

관련 문제