2010-04-16 5 views
4

Я пытаюсь создать значок/виджет (ячейка 1 ячейка x 1), который можно разместить на главном экране Android. Виджет будет выглядеть и действовать точно так же, как и другие стандартные ярлыки в android. Он будет иметь значок и под этим ярлыком, он будет выбираться с помощью трекбола (подсветка возможна), он будет подсвечиваться при выборе/нажатии.Домашний экранный виджет Android (значок, стиль ярлыка)

Как мне создать этот виджет главного экрана?

Должен ли я сам создавать виджет с помощью кода/xml или есть какой-то стандартный xml, стиль, тема, код, который я могу использовать, чтобы гарантировать, что виджет будет иметь тот же стиль/тему, что и другие виджеты главного экрана ?

я в настоящее время имеют следующие

Рез/рисуем/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> 

Рез/макет/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

+0

Ниже приведен правильный ответ: вы не должны делать виджетов похожими на ярлыки, так как разные ОС могут показывать свои ярлыки по-разному! Поэтому, если вы сделаете один для телефона HTC, это может не соответствовать тому, как ярлыки отображаются на телефоне MOTOBLUR.Сказав это, я все равно сделал это и сделал свой вид похожим на HTC :) – dmulligan

ответ

9

«Правильный способ сделать это» - сделать ярлык, а не пытаться имитировать его с помощью виджета приложения. Это было отмечено, неоднократно основной Android команды (особенно Romain Guy) на [Android-разработчиков] дискуссионный список such as:

Виджеты должны выглядеть виджетами, а не ярлыков. Основная причина - , что нет абсолютно никакой гарантии о том, как будет выглядеть ярлык. Другие устройства (особенно с пользовательских системных интерфейсов, таких как MOTOBLUR или HTC Sense) могут отличаться от внешнего вида и . Или в следующем обновлении Android мы можем изменить способ отображения ярлыков .

+1

выглядит так: создание виджета 1x1 - единственный способ создать значок приложения с помощью «встречного значка». Есть ли способ применить тему, специфичную для устройства, для моего макета? –

+0

@Kevin: По моему определению «декларативно» ни один виджет приложения и ярлык не могут быть объявлены декларативно. – CommonsWare

+0

Как получить имя виджета, которое будет отображаться под виджетами на главном экране, например, для приложений? – toobsco42

1

Чтобы сделать ваш товар в соответствии с внешним видом системы, не сложно, ссылаясь на системный атрибут android:attr/selectableItemBackground. Например, если вы хотите, чтобы сделать ImageView в виджете выглядеть «по выбору» с правильной раскраской, и т.д.: просто сделать

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

Есть много в android_sdk_path/platforms/android-x. Счастливый копать!

EDIT: Я узнал позже, что этот простой атрибут не живет в SDK < v11. Поэтому лучший способ, который я знаю сейчас, - загрузить пакет шаблона приложения и использовать его.

Смежные вопросы