2010-04-16 74 views
4

我正在嘗試創建可放置在主屏幕上的圖標/小部件(1 cell x 1 cell)。這個小部件的外觀和動作完全像android中的其他標準快捷方式。它會有一個圖標,在它下面有一個標籤,它可以通過跟蹤球進行選擇(突出顯示),當它被選中/點擊時它會被突出顯示。Android主屏幕小部件(圖標,標籤樣式)

我該如何着手創建這個主屏幕小部件?

我是否必須自己使用code/xml創建窗口小部件,還是有一些標準的xml,樣式,主題,代碼可用於確保窗口小部件與其他主屏幕窗口小部件具有相同的樣式/主題?

目前,我有以下

RES /繪製/ corners.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/Corners"> 
    <stroke android:width="4dp" android:color="#CC222222" /> 
    <padding android:left="4dp" android:top="1dp" android:right="4dp" android:bottom="1dp" /> 
    <corners android:radius="4dp" /> 
</shape> 

RES /佈局/ widget.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/Widget" 
    android:layout_width="72dip" 
    android:layout_height="72dip" 
    android:orientation="vertical" 
    android:focusable="true" 
    android:gravity="center_horizontal" 
    style="@android:style/Widget" 
    > 

    <ImageView 
     android:id="@+id/WidgetIcon" 
     android:src="@drawable/icon" 
     android:layout_width="fill_parent" 
     android:layout_height="50dip" 
     android:paddingTop="3dip" 
     android:gravity="center" 
     /> 

    <TextView 
     android:id="@+id/WidgetLabel" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:text="@string/app_name" 
     android:textSize="15dip" 
     android:background="@drawable/corners" 
     /> 

</LinearLayout> 

產生的小部件看起來有些什麼接近,但它不可選,單擊時不會突出顯示,標籤也不完全在正確的位置或正確的樣式。

任何想法,如果有一個正確的方法來做到這一點,或者我應該繼續努力,直到我離得更近?

+0

你有沒有找到一個解決方案,它將如何看起來像標準標籤? – chrisonline 2011-06-15 08:58:35

+0

下面的答案是正確的,你不會假設小部件看起來像快捷方式,因爲不同的操作系統可能會顯示不同的快捷方式!因此,如果您爲HTC手機制作一個,它可能與MOTOBLUR手機上顯示快捷方式的方式不一致。說,我反正做了我的一個看起來像HTC :) – dmulligan 2011-07-20 17:01:46

回答

9

「正確的做法」是製作一個快捷方式,而不是試圖用應用程序小部件模仿它。這已被多次指出由核心Android團隊(尤其是羅曼蓋伊)中的[Android的開發者]討論列表上,such as

窗口小部件應該看起來像小部件,而不是像 快捷方式。主要原因是 ,絕對沒有保證 關於快捷方式的樣子。 其他設備(特別是帶有MOTOBLUR或HTC Sense的自定義系統UI)的設備可能會有不同的外觀和 的感覺。或者在Android 的下一次更新中,我們可能會更改提供的快捷方式 的方式。

+1

看起來像1x1小部件的創建是唯一的方式來創建應用程序圖標與'櫃檯徽章'。有什麼辦法可以將設備特定的主題應用於我的佈局嗎? – 2011-04-14 19:28:08

+0

@Kevin:根據我對「聲明式」的定義,無論是應用程序小部件還是快捷方式都不能聲明性聲明。 – CommonsWare 2012-11-21 14:46:02

+0

您如何獲得小部件的名稱,以便在主屏幕上顯示在小部件下面,就像它爲應用程序一樣? – toobsco42 2015-05-17 16:22:04

1

通過引用系統屬性android:attr/selectableItemBackground來使您的項目與系統外觀一致並不困難。例如,如果你想在你的widget的ImageView的期待「選擇」適當高亮等:只是做

<ImageView 
    ... 
    android:background="?android:attr/selectableItemBackground" 
    ... 
    /> 

有很多android_sdk_path/platforms/android-x。快樂挖!

編輯:我後來發現,這個簡單的屬性不住在SDK < v11。所以我現在知道的最好的方法是下載appwidget模板包並使用它。