2011-09-22 69 views
4

我是Android開發的初學者。目前,我正致力於創建一個小型主屏幕小部件,通過單擊按鈕更改手機的壁紙。設置壁紙工作正常,但我想製作可點擊的小圖片(ImageView),以允許用戶顯示和隱藏此設置按鈕。如何在Android主屏幕小部件中隱藏/顯示按鈕

我在服務上設置它,並使用PendingIntent將我的onClick事件附加到相同的服務,但我無法檢測到按鈕的屬性是顯示還是隱藏。

因此,是否有任何建議和解決方案,使我的ImageView顯示或隱藏主屏幕小部件中的按鈕?

在此先感謝...

回答

12

您可以使用mButton.setVisibility(View.GONE)來隱藏按鈕。

您還可以使用mButton.isShown()來檢查按鈕在布爾變量中的可見性狀態。

編輯:

對於實例

AppWidgetProvideronReceive()

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

    remoteViews.setViewVisibility(viewId, visibility); 

所以隱藏你的按鈕

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

編輯 - 2:根據卡爾蒂克的合作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

Call setVisibility(View.Invisible);在用戶點擊按鈕之後用你創建的按鈕對象的幫助。

+0

對不起,我不知道如何從RemoteView訪問該按鈕對象? – Fon

+0

我也沒有遠程視圖的知識,但讓我試一試或研究相關的東西,然後我會告訴你真正的解決方案。 – Rocker

+0

感謝您的幫助...我現在正在工作 – Fon

0
<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

你不應該的onReceive做這個(上下文,意圖)作爲官方文件中提到的方法

這就是所謂的對於每個廣播和每個上述回調方法之前。您通常不需要實現此方法,因爲默認的AppWidgetProvider實現會過濾所有App Widget廣播並根據需要調用上述方法。

你應該在onAppWidgetOptionsChanged()中做到這一點。 請參閱official docs.