如何在android主屏幕小部件中隐藏/显示按钮

时间:2011-09-22 05:08:49

标签: android user-interface widget onclick

我是android开发的初学者。目前,我正在创建一个小的主屏幕小部件,点击按钮即可更改手机的壁纸。设置壁纸工作正常,但我想制作一个可点击的小图片(ImageView),以允许用户显示和隐藏此设置按钮。

我在服务上设置它并使用PendingIntent将我的onClick事件附加到同一个服务,但我无法检测按钮的属性是显示还是隐藏。

因此,是否有任何建议和解决方案让我的ImageView显示或隐藏主屏幕小部件中的按钮?

提前致谢..

5 个答案:

答案 0 :(得分:13)

您可以使用mButton.setVisibility(View.GONE)隐藏按钮。

您还可以使用mButton.isShown()在布尔变量中检查按钮的可见性状态。

编辑:

例如

onReceive()的{​​{1}},

AppWidgetProvider

所以隐藏你的按钮

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

     remoteViews.setViewVisibility(viewId, visibility);

编辑 - 2:根据Kartik的评论,

示例代码:

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

答案 1 :(得分:1)

调用setVisibility(View.Invisible);在用户单击按钮后,在您创建的按钮对象的帮助下。

答案 2 :(得分:1)

// 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);

答案 3 :(得分:0)

你不应该在官方文档中提到的onReceive(Context,Intent)方法中这样做

  

在每个广播和每个上述回调方法之前调用此方法。您通常不需要实现此方法,因为默认的AppWidgetProvider实现过滤所有App Widget广播并根据需要调用上述方法。

您应该在onAppWidgetOptionsChanged()中执行此操作。 请参阅official docs.

答案 4 :(得分:-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();
             }
          }
       }
    }