Я бы сделал что-то вроде:
<LinearLayout>
<ImageView/>
<TextView/>
</LinearLayout>
Фон LinearLayout будет <selector>
aka StateListDrawable . Селектор будет указывать прозрачный фон, который при выборе станет оранжевым.
LinearLayout также будет представлением, для которого вы установите PendingIntent , чтобы пользователь мог щелкнуть в любом месте представления, и оно будет зарегистрировано как событие onClick.
Что касается проблем с макетом, вам просто нужно поиграть с макетом, чтобы изображение и текст выглядели как другие значки на домашнем экране. Я думаю, что будет не так сложно получить горизонтально центрированный ImageView с горизонтально центрированным TextView под ним, а затем просто настроить размеры изображения и размер текста, чтобы они выглядели так же, как другие значки на домашнем экране.
Что касается проблемы, с которой вы сталкиваетесь при переключении в альбомную ориентацию на домашнем экране, вам потребуется предоставить альбомную версию XML-файла макета, настроенную для правильного отображения в альбомной ориентации. Смотрите мой ответ на этот вопрос , чтобы узнать, как это сделать. Когда я делаю виджеты приложений, я обычно получаю портретный вид, который выглядит идеально, затем копирую этот файл макета в каталог layout-land и начинаю вносить изменения, пока он не будет выглядеть так же, как и в альбомной.