Короткий ответ, Вы ничего не пропускаете. SDK Android не обеспечивает прямой метод изменить индикатор TabHost
после того, как это было создано. Эти TabSpec
только используется для создания вкладки, таким образом изменяясь TabSpec
после того, как факт не будет иметь никакого эффекта.
я думаю, что существует обходное решение, все же. Звоните mTabs.getTabWidget()
для получения TabWidget
объект. Это - просто подкласс ViewGroup
, таким образом, можно звонить getChildCount()
и getChildAt()
для доступа к отдельным вкладкам в TabWidget
. Каждой из этих вкладок является также Представление, и в случае вкладки с графическим индикатором и текстовой меткой, это - почти наверняка некоторый другой ViewGroup
(возможно, LinearLayout
, но это не имеет значения), который содержит ImageView
и TextView
. Таким образом с небольшой игрой с отладчиком или Log.i
, необходимо быть в состоянии выяснить рецепт, чтобы добраться ImageView
и изменить его непосредственно.
оборотная сторона - то, что, если Вы не осторожны, точное расположение средств управления во вкладке могло бы измениться, и Ваше приложение могло повредиться. Ваше начальное решение, возможно, более устойчиво, но с другой стороны оно могло бы привести к другим нежелательным побочным эффектам как мерцание или сфокусировать проблемы.
Один из способов узнать:
gcc -O1 -c -Q -v dummy.c
(где dummy.c - ваше имя файла.) Это заставляет gcc выдавать флаги, используемые в командной строке.
Изменить: Пожалуйста, см. ответ Кастауыры по этому поводу. Похоже, вы не можете смоделировать полную оптимизацию -O1
только с помощью флагов -f
.
К сожалению, это невозможно. Есть много индивидуальных флагов оптимизации, включенных -O1, true, однако много кода в GCC проверяет значение глобального флага оптимизации и выполняет оптимизацию, не указанную ни одной из опций -f ..
Из руководства:
-O
-O1
Optimize. Optimizing compilation takes somewhat more time, and a lot more memory for a large function.
With -O, the compiler tries to reduce code size and execution time, without performing any optimizations that take a great deal of compilation time.
-O turns on the following optimization flags:
-fauto-inc-dec
-fcprop-registers
-fdce
-fdefer-pop
-fdelayed-branch
-fdse
-fguess-branch-probability
-fif-conversion2
-fif-conversion
-fipa-pure-const
-fipa-reference
-fmerge-constants
-fsplit-wide-types
-ftree-builtin-call-dce
-ftree-ccp
-ftree-ch
-ftree-copyrename
-ftree-dce
-ftree-dominator-opts
-ftree-dse
-ftree-forwprop
-ftree-fre
-ftree-phiprop
-ftree-sra
-ftree-pta
-ftree-ter
-funit-at-a-time
Это зависит от вашей версии gcc
. См. Справочную страницу gcc
.
На моей машине -O
(то есть -O1
) включает следующие оптимизации:
-fauto-inc-dec -fcprop-registers -fdce -fdefer-pop -fdelayed-branch
-fdse -fguess-branch-probability -fif-conversion2 -fif-conversion
-finline-small-functions -fipa-pure-const -fipa-reference
-fmerge-constants -fsplit-wide-types -ftree-builtin-call-dce
-ftree-ccp -ftree-ch -ftree-copyrename -ftree-dce
-ftree-dominator-opts -ftree-dse -ftree-fre -ftree-sra -ftree-ter
-funit-at-a-time
-O also turns on -fomit-frame-pointer on machines where doing so
does not interfere with debugging.
Вы также можете попробовать использовать эту прагу (требует GCC> = 4.4):
#pragma GCC optimize opt_list
void f()
Эта прагма позволяет включить и выключать конкретные оптимизации для заданной функции. OPT_LIST - это список параметров -F * * без -F.
Существует также функциональный атрибут для изменения уровня оптимизации:
int f() __attribute__((optimize(1)));
Вы также можете изменить глобальный уровень оптимизации (применяются ко всем последующим функциям):
#pragma GCC optimize 1
#pragma GCC optimize 0
Вы также можете использовать (применить ко всем последующим функциям):
#pragma GCC optimization_level n
и Для компилятора Intel C ( DOC ; применяется только для следующей функции)
#pragma intel optimization_level n