Панель вкладок в стиле Android Market

Как лучше всего реализовать панель вкладок, подобную Android Market (приложения/игры/загрузки)?

alt text

Было бы здорово, если бы я мог использовать TabHost, но я считаю, что он не позволяет такой уровень настройки.


person hpique    schedule 15.07.2010    source источник


Ответы (4)


Как сказал Кристиан, определенно возможно использовать TabHost, и вам даже не нужно использовать код androidtabs, на который он ссылается. Начиная с SDK уровня 4 (т.е. Android 1.6) вы можете передать View в TabHost.TabSpec.setIndicator(), что позволит вам полностью контролировать внешний вид вкладок.

Однако нажатие любой из этих кнопок в Маркете открывает новое действие, и поэтому использование простых Button может более точно отражать это поведение, чем TabHost.

Если вам также нужна поддержка 1.5, вы можете загрузить zip-архив из этот пост. Он содержит TabHost и т. д. из Android 1.6. Копирование этого в ваш проект должно работать даже на Android 1.5. После этого вам будет доступен setIndicator(View v).

person benvd    schedule 15.07.2010
comment
Спасибо Килнр. К сожалению, я тоже должен ориентироваться на 1,5 устройства. Думаю, я могу использовать стиль по умолчанию для устройств 1.5 и использовать setIndicator в более новых версиях. - person hpique; 15.07.2010

Это можно сделать с помощью TabHost. Более того, вы можете найти полнофункциональный пример того, как это сделать, здесь: http://code.google.com/p/androidtabs/

person Cristian    schedule 15.07.2010

Давайте попробуем этот код:

TabHost.TabSpec spec;  // Reusable TabSpec for each tab
TextView txtTabInfo; // Reusable tab indicator

// Create our tab indicator
txtTabInfo = new TextView(this);
txtTabInfo.setText("videos");
txtTabInfo.setTextSize(16);
txtTabInfo.setTypeface(Typeface.DEFAULT_BOLD);
txtTabInfo.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
txtTabInfo.setBackgroundResource(R.drawable.minitab);
txtTabInfo.setMinHeight(55);

spec = tabHostMM.newTabSpec("video");
spec.setContent(R.id.mm_video);
spec.setIndicator(txtTabInfo);
tabHostMM.addTab(spec);
person anticafe    schedule 20.02.2011

Вы можете выполнить эту работу, изменив файл tab.xml. В tab.xml в линейном макете сначала используйте один дочерний макет, который содержит изображение и метку (рынок Android). Под этим дочерним макетом поместите узел вкладки и макет кадра. Тогда вы сможете выполнить эту задачу.

person Manjeet    schedule 22.11.2011