我是android开发的初学者。目前,我正在创建一个小的主屏幕小部件,点击按钮即可更改手机的壁纸。设置壁纸工作正常,但我想制作一个可点击的小图片(ImageView),以允许用户显示和隐藏此设置按钮。
我在服务上设置它并使用PendingIntent将我的onClick事件附加到同一个服务,但我无法检测按钮的属性是显示还是隐藏。
因此,是否有任何建议和解决方案让我的ImageView显示或隐藏主屏幕小部件中的按钮?
提前致谢..
答案 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();
}
}
}
}