我是Android開發的初學者。目前,我正致力於創建一個小型主屏幕小部件,通過單擊按鈕更改手機的壁紙。設置壁紙工作正常,但我想製作可點擊的小圖片(ImageView),以允許用戶顯示和隱藏此設置按鈕。如何在Android主屏幕小部件中隱藏/顯示按鈕
我在服務上設置它,並使用PendingIntent將我的onClick事件附加到相同的服務,但我無法檢測到按鈕的屬性是顯示還是隱藏。
因此,是否有任何建議和解決方案,使我的ImageView顯示或隱藏主屏幕小部件中的按鈕?
在此先感謝...
我是Android開發的初學者。目前,我正致力於創建一個小型主屏幕小部件,通過單擊按鈕更改手機的壁紙。設置壁紙工作正常,但我想製作可點擊的小圖片(ImageView),以允許用戶顯示和隱藏此設置按鈕。如何在Android主屏幕小部件中隱藏/顯示按鈕
我在服務上設置它,並使用PendingIntent將我的onClick事件附加到相同的服務,但我無法檢測到按鈕的屬性是顯示還是隱藏。
因此,是否有任何建議和解決方案,使我的ImageView顯示或隱藏主屏幕小部件中的按鈕?
在此先感謝...
您可以使用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:根據卡爾蒂克的合作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();
}
}
}
}
<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>
這個答案几乎是接受答案的小版本... – scenia
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();
}
}
}
}
你不應該的onReceive做這個(上下文,意圖)作爲官方文件中提到的方法
這就是所謂的對於每個廣播和每個上述回調方法之前。您通常不需要實現此方法,因爲默認的AppWidgetProvider實現會過濾所有App Widget廣播並根據需要調用上述方法。
你應該在onAppWidgetOptionsChanged()中做到這一點。 請參閱official docs.
我也考慮過它,但我不知道如何通過RemoteView – Fon
調用它,請檢查編輯後的答案。 – Hiral
我們可以檢查按鈕的當前可見性狀態嗎?看起來像remoteViews不允許getViewVisibility。對不起,提出這麼多問題。 – Fon