【问题标题】:How to Hide/Show button in android home screen widget如何在 android 主屏幕小部件中隐藏/显示按钮
【发布时间】:2011-09-22 05:08:48
【问题描述】:

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

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

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

提前谢谢..

【问题讨论】:

    标签: android user-interface widget onclick


    【解决方案1】:

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

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

    已编辑:

    举例

    AppWidgetProvider 中的onReceive()

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

    所以为了隐藏你的按钮

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

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

    示例代码:

        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();
                 }
             }
        }
    }
    

    【讨论】:

    • 我也想了但是不知道怎么通过RemoteView调用
    • 我们可以检查按钮的当前可见性状态吗?似乎 remoteViews 不允许 getViewVisibility。抱歉问了这么多问题。
    • 你必须维护一个静态布尔标志来处理你的按钮是否不可见。将按钮的状态保存在标志中,为了保持点击,您可以在 remoteView 方法中构建逻辑。
    • @Hiral 我想在点击主屏幕小部件时打开活动我该如何获得帮助?
    【解决方案2】:

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

    【讨论】:

    • 抱歉,我不知道如何从 RemoteView 访问该按钮对象?
    • 我也没有远程视图的知识,但让我尝试一下或研究一些与之相关的东西,然后我会告诉你真正的解决方案。
    【解决方案3】:
    // 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);
    

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:
        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();
                     }
                  }
               }
            }
        

        【讨论】:

          猜你喜欢
          • 2023-02-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-29
          • 2021-10-07
          • 1970-01-01
          • 1970-01-01
          • 2021-11-25
          相关资源
          最近更新 更多