Есть ли обходной путь к потере отрисовки состояния при передаче TextView методу setIndicator из TabSpec?

1

Я реализую Tabbed Layout в приложении, где недвижимость с вертикальным экраном имеет первостепенное значение, поэтому я изменил высоту вкладок в XML-макете. На вкладках нет ресурса, который можно загрузить с помощью значков, у них есть основные текстовые метки. Я использую метод setIndicator(CharSequence) при настройке TabSpec программно, но, похоже, даже при использовании этого метода ОС Android резервирует верхнюю часть вкладки для значка, а также изменяет размеры вкладок снизу вверх. В результате мои вкладки настолько коротки, что текстовая метка на вкладке не видна.

Из того, что я собрал в своем Googling, а также из других вопросов, лучший способ решить эту проблему - использовать TextView вместо CharSequence для индикатора. Итак, я попытался программно объявить новый TextView, а затем передать его методу setIndicator. Текстовая метка теперь видна, но на вкладке нет абсолютно никаких визуальных стилей/состояний, которые когда-либо были. Кроме того, если эта вкладка активна, сам текст больше не отображается из-за отсутствия доступных ресурсов. Это, очевидно, также проблема.

Я хотел бы опубликовать код, который я использую, но характер проекта не позволяет мне использовать какой-либо источник. Однако я могу сказать следующее:

  • При программном создании TextView я попытался сделать так же мало, как просто настройку текста, вплоть до использования LayoutParams(int, int) и setBackgroundColor и многих других свойств. Я попытался использовать полностью прозрачные значения для backgroundColor. Нет.
  • Я не пробовал создавать TextView в качестве XML-ресурса и использовать его таким образом, хотя я не вижу, как это изменит результат.

И поэтому мой вопрос следующий:

Есть ли способ получить короткие вкладки, которые имеют только текстовую метку, без необходимости проходить процесс расширения классов или создания наборов доступных ресурсов для выделения ресурсов? Хотя это, в основном, простые задачи, характер этого приложения заключается в том, что он находится на очень коротком обороте времени, а представление/пользовательский хром имеет наивысшую важность; в настоящее время функциональность является приоритетом номер один, и если я смогу сэкономить время, используя предоставленные элементы пользовательского интерфейса, то это маршрут, который я бы предпочел принять, поскольку у меня нет действительно возможности загружать кучу графического программного обеспечения для редактирования на моей рабочей станции без головных болей и я также единственный, кто работает над проектом, далее, единственный здесь, которому разрешено работать над проектом. Приношу свои извинения за туманность всего этого дела.

Спасибо заранее.

Теги:

1 ответ

2
Лучший ответ

Я отсылаю вас к моему ответу в этом question.

Я использую этот код для установки индикатора

TabHost tabHost = getTabHost();
TabHost.TabSpec spec;
Intent intent;

intent = new Intent().setClass(this, activity1.class);
spec = tabHost.newTabSpec("tab1").setIndicator("tab1").setContent(intent);
tabHost.addTab(spec);

intent = new Intent().setClass(this, activity2.class);
spec = tabHost.newTabSpec("tab2").setIndicator("tab2").setContent(intent);
tabHost.addTab(spec);
...
// set height of tabs
tabHost.getTabWidget().getChildAt(0).getLayoutParams().height = 30; // where child 0 refers "tab1"
tabHost.getTabWidget().getChildAt(1).getLayoutParams().height = 30; // where child 1 refers "tab2"

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

  • 0
    Это сработало отлично. Благодарю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню