Как скрыть / показать кнопку в виджете домашнего экрана Android - PullRequest
4 голосов
/ 22 сентября 2011

Я новичок в разработке Android. В настоящее время я работаю над созданием небольшого виджета на домашнем экране, который меняет обои мобильного телефона, нажимая кнопку. Настройка обоев работает нормально, но я хочу сделать кликабельное маленькое изображение (ImageView), чтобы позволить пользователю показать и скрыть эту кнопку настройки.

Я настроил его на службу и использую PendingIntent, чтобы прикрепить событие onClick к той же службе, но я не могу определить свойство кнопки, отображать или скрывать.

Следовательно, есть ли какое-либо предложение и решение, чтобы мой ImageView показывал или скрывал кнопку в виджете главного экрана?

Заранее спасибо ..

Ответы [ 5 ]

13 голосов
/ 22 сентября 2011

Вы можете использовать mButton.setVisibility (View.GONE), чтобы скрыть кнопку.

Вы также можете проверить состояние видимости кнопки в логической переменной, используя mButton.isShown ().

Отредактировано:

Например

В onReceive() из AppWidgetProvider,

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

     remoteViews.setViewVisibility(viewId, visibility);

Так что для сокрытия вашей кнопки

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

Редактировать - 2: Согласно комментарию Картика,

Пример кода:

    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();
             }
         }
    }
}
1 голос
/ 05 марта 2014
// 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);
1 голос
/ 22 сентября 2011

Вызов setVisibility (View.Invisible);с помощью кнопки объекта, созданного вами после нажатия кнопки пользователем.

0 голосов
/ 11 августа 2017

Вы не должны делать это в методе onReceive (Context, Intent), как указано в официальной документации.

Это вызывается для каждой широковещательной передачи и перед каждым из вышеперечисленных методов обратного вызова.Обычно вам не нужно реализовывать этот метод, потому что реализация AppWidgetProvider по умолчанию фильтрует все широковещательные рассылки виджетов приложений и вызывает соответствующие методы, описанные выше.

Это необходимо сделать в onAppWidgetOptionsChanged ().См. официальные документы.

0 голосов
/ 26 мая 2016
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();
             }
          }
       }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...