Экран панели действий CustomView слишком длинный

Наконец, после того, как каждый CustomView полностью обернул родительский элемент Tab, я столкнулся с проблемой, когда вкладки слишком длинны и превращают панель действий в слайдер. Мои чертежи имеют ширину 150 пикселей, что должно быть хорошо, потому что я тестировал ширину в пикселях экрана Samsung Galaxy S2 и получил 480 пикселей (480/3 вкладки = 160 пикселей каждый).

Скриншот:

Введите описание изображения здесь

Настройка. Каждая вкладка устанавливается с помощью того же RelativeLayout, у которого есть разные ресурсы для розыгрыша, прикрепленные к макету. Затем этот макет передается в setCustomView () вкладки. Я не думаю, что есть необходимость в ImageView для каждой вкладки, если это не устранит мою проблему. Некоторые изменения конфигурации стиля, такие как удаление левого и правого заполнения TabView, были сделаны для размещения пользовательских представлений по вкладке.

Код (не используя ImageView, устанавливающий ресурс на RelativeLayout)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="56dp" android:layout_margin="0dp" android:paddingBottom="2dp" > <!-- <ImageView android:id="@+id/ivCustomTab" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingBottom="2dp" android:contentDescription="@string/tabsDescription" android:duplicateParentState="true" /> --> </RelativeLayout> 

 //setting up tabs + custom views on tabs LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); RelativeLayout discoverTabLayout = (RelativeLayout) inflater.inflate(R.layout.actionbar_tabs, null); RelativeLayout tagsTabLayout = (RelativeLayout) inflater.inflate(R.layout.actionbar_tabs, null); RelativeLayout badgeTabLayout = (RelativeLayout) inflater.inflate(R.layout.actionbar_tabs, null); //ImageView customTabImg = (ImageView) customTabLayout.findViewById(R.id.ivCustomTab); //re-setting this ImageView for each tab ActionBar.Tab discoverTab = actionBar.newTab();//.setText("Discover").setIcon(R.drawable.selector_tabicon_discover);//.setCustomView(drawable.selector_tab_discover); //customTabImg.setImageResource(R.drawable.selector_tab_discover); discoverTabLayout.setBackgroundResource(R.drawable.selector_tab_discover); discoverTab.setCustomView(discoverTabLayout); 

 <!-- Application theme. --> <style name="Theme.AppTheme" parent="AppBaseTheme"> <!-- All customizations that are NOT specific to a particular API-level can go here. --> <item name="android:textSize">18sp</item> <item name="actionBarTabStyle">@style/Theme.TabsNoPadding</item> <item name="android:actionBarTabStyle">@style/Theme.TabsNoPadding</item> </style> <style name="Theme.TabsNoPadding" parent="@style/Widget.Sherlock.ActionBar.TabView"> <item name="android:paddingLeft">0dp</item> <item name="android:paddingRight">0dp</item> <item name="android:minWidth">0dp</item> </style> 

То, что я пробовал:

  • Добавление android: layout_width = "120dp" в RelativeLayout для сокращения вкладок, но ширина осталась прежней.
  • Измените размеры изображений и уменьшите общую длину 45 пикселей, без изменений. И если я установил их слишком маленькими, они не будут закрывать вкладку.
  • Я также заметил, что табуляция customView (ов) в большинстве случаев исчезает onCreate (). Не уверен, что это имеет какое-либо отношение к рендерингу с макетом прокрутки вкладки, который я не хочу.

При необходимости я могу указать свой основной код активности.

  1. Я бы предложил подумать в dp (независимый от плотности пиксель) вместо пикселей (пикселей) при работе в Android.

  2. Если вы хотите создать настраиваемую вкладку, я бы предложил просто создать LinearLayout с шириной, заданной как match_parent, и высотой по вашему выбору (например, 48dp). Ориентация будет установлена ​​на горизонтальную.

Внутри LinearLayout создайте столько изображений ImageView или View, сколько хотите, и установите ширину в 0dp, height to match_parent и, самое главное, весом до 1 (без dp или любого другого устройства) для каждого View внутри LinearLayout. Таким образом, вкладки будут иметь одинаковую ширину, и они останутся в границах экрана.

Надеюсь это поможет.