2013-01-09 26 views
3

我開發了一個適用於平板電腦的可重新定義的應用程序窗口小部件。 app-widget在絕大多數發射器的大多數設備上都很好,但是在方向模式下,特別是在GO-HD Launcher方向上存在一些問題。 app-widget的高度太大,看起來不太好。確定主屏幕的appwidgets空間網格大小

爲了解決這個問題,我創建了一個方法來允許用戶在app-widget空間中設置任何額外的邊距,他希望使它看起來不錯。例如,當設備處於縱向模式時,他可以設置額外的20像素頂部邊距,橫向等設置時只有5像素。

現在我正在創建一個活動,以允許用戶設置邊距。我想做一個小的預覽區域(它將是一個線性佈局,具有相同的背景可繪製應用程序窗口),以便用戶瞭解應用窗口小部件在主屏幕上的外觀如何與這些邊距。其實我已經這樣做了,但結果卻遠離現實。

所以我的問題是:

有沒有什麼辦法讓大小(或接近),其發射使用放置在主屏幕上的應用程序,小部件應用網格單元的?請注意,我知道並非所有的發射器都遵循Android公式,但我想要的是獲得一種計算近似值的方法。

---- ----編輯

爲了更好地理解我的問題,我創建了一個截圖:

所有的

shot

首先,應用程序窗口小部件的背景一個沒有圖形或尺寸的形狀xml文件。 Android需要在可用空間中繪製它。在我看來,這是最好的GUI設計(至少在背景中)。現在在屏幕1中,您可以在默認的Android啓動器中以縱向模式查看小部件,它看起來非常漂亮,並且正在重新調整大小。在屏幕2和3中,您可以在GO-HD啓動器(橫向和縱向模式)中看到它,在此啓動器中,它在橫向模式下非常小,在縱向模式下非常大。我可以通過讓用戶調整邊距來解決這個問題,就像您在屏幕4中看到的那樣。

如果您將預覽(屏幕4中心的黑暗區域)與Android的默認啓動器中的原始應用程序控件你可以看到沒有一個好的匹配。我所問的是如何向用戶展示更好的預覽(最接近實際的app-widget)。

謝謝你,請原諒我的英語

+1

想出一個更靈活,更容易適應不同單元尺寸等GUI設計會不會更簡單也更可靠? – CommonsWare

+0

@CommonsWare請看看我的編輯。謝謝 – Christos

回答

0

有沒有什麼辦法讓大小(或接近),其發射使用放置在主屏幕上的應用程序,小部件應用網格單元的?

不是。每個主屏幕開發人員都歡迎您完成開發者的願望。

在此發射

它看起來在橫向模式非常小,在縱向模式下非常大的

然後拿出容納這些尺寸的設計。例如,您可能會看到在主屏幕上運行時還有哪些其他應用程序窗口小部件會執行此操作。

+0

謝謝你的回答。我已經知道第一部分(非常好:))。至於第二個,我實際上嘗試了其他一些小部件,而所有可重新定製的小部件與非「標準」發射器都有同樣的問題。不可改變大小沒有問題,但我需要創建一個可重新調整大小的問題。至於設計,我真的無法弄清楚一個不同的可重新設計的設計如何解決這個問題。任何想法是受歡迎的。再次感謝。 – Christos

+0

@Christos:「任何想法都值得歡迎」 - 我的想法是不用擔心。由你自己承認,其他人正在經歷同樣的行爲。然而,他們的應用程序正在被下載,據推測,由於他們最初被添加到用戶選擇的主屏幕時,他們的應用程序窗口小部件的行爲稍有不規則,估計它們的收視率不會很差。 – CommonsWare

+0

@Christos我認爲這是正確的答案,你應該接受它。即使它說「抱歉,這是不可能的」這樣的。 –

0

我不知道如何進行可靠的預覽,但它可能有助於根據方向使用不同的邊距。您可以使用layout-land和layout-port指定具有不同邊距的不同佈局。

+0

在我看來,你沒有看過我的問題。這正是我正在做的。我只是嘗試創建一個可靠的預覽。 – Christos

+0

從您的問題中可以看出,您對縱向/橫向佈局也使用了不同的邊距(只允許用戶調整邊緣的方向)。也許你在做這兩件事? – paul

+0

如果我的問題誤導了我的利潤率(我的英文不太好,那麼可能是),我很抱歉。但是關於創建預覽屏幕而不是關於app-widget的佈局。不管怎麼說,還是要謝謝你。 – Christos

1

您是否實施了AppWidgetProvider.onAppWidgetOptionsChanged(Context, AppWidgetManager, int, Bundle)?所有乖巧發射應當報告有關放置小部件,它可以從包中檢索某些指標,使用如下代碼:

int minwidth_dp = bundle.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH); 
int maxwidth_dp = bundle.getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH); 
int minheight_dp = bundle.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT); 
int maxheight_dp = bundle.getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT); 

注意,有沒有在這裏細胞的概念 - 這些指標對應的實際大小你的小部件,無論它佔用多少單元。

股票發射這些數據映射到不同的方向,像這樣:

minwidth - >縱向寬度
了minHeight - >景觀高度
maxwidth - >景觀寬
maxheight - >縱向高度

任何在兩個方向上保持相同行數和列數的啓動程序,並調整單元格大小以適應屏幕,應該映射這些相同 辦法。請注意,假設這些關係始終有效可能會產生不希望的結果,如果您將其嵌入啓動程序中,該啓動程序會對其小部件執行某些不常見的操作 - 將它們僅放入屏幕的一部分,或者在不同方向使用不同數量的行或列。

或者,某些啓動器可能會在最小值和最大值中報告當前方向的度量標準,並且在方向更改時再次使用新度量標準調用您。但是,如果您只對目前的方向感興趣,這些發射器的行爲與股票發射器的行爲是兼容的。

+0

據我所知,無法在低級版本上獲得這些指標。 –

+0

感謝您的回答,使用onAppWidgetOptionsChanged以獲取指標的想法已經超越了我的想法。然而,它不能用於我的情況,因爲我想知道每個方向的指標,而不管設備當前的設置如何,更重要的是,我希望在主屏幕上添加小部件之前的指標,即配置活動中。無論如何,非常感謝你的時間和一個非常有據可查的答案。 – Christos

+0

我不認爲你會比onAppWidgetOptionsChanged更好。也許你可以讓你的配置活動啓動一個非常短的計時器,然後立即完成()。然後,當onAppWidgetOptionsChanged被調用,或者定時器到期時,你可以自己啓動Activity()。這種方法最大的缺點可能是用戶無法取消添加widget,因爲它在技術上已經被添加了。但我無法想象如何以任何其他方式獲得任何遠程可靠的度量標準。 –

0

我知道這已經有一段時間了,但我剛剛回復了我的其他答案,所以我有機會用新鮮的目光來看這個。

我認爲原始問題的真正答案可能是自己設置窗口小部件的大小,或者也許只是高度,因爲這似乎是截圖中的問題。在您的佈局集layout_height="@dimen/my_perfect_height"中,啓動器將它置於單元格內。如果您需要一點靈活性,您可以使用幾種不同的佈局和不同的指標,並讓用戶在它們之間進行選擇。當然,因爲您是設置它的人,所以您無需預覽該高度。