Я создаю Вкладка так:TabHost setIndicator - использовать макеты, а не значки?
TabSpec tab = tabHost.newTabSpec("Tab1").setIndicator("Tab1",res.getDrawable(R.drawable.tab1_selector));
и это мой селектор:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tab3Selector">
<item android:drawable="@drawable/icon_pressed" android:state_selected="true"/>
<item android:drawable="@drawable/icon_unpressed"/>
</selector>
где icon_pressed и icon_unpressed просто иконки (PNG). Это прекрасно работает. Тем не менее, я хотел бы использовать вместо настройки значка и заголовка для установки только макета (где я могу установить значок названия +, но я хочу). Поэтому я попытался это:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tab3Selector">
<item android:drawable="@drawable/layout_pressed" android:state_selected="true"/>
<item android:drawable="@drawable/layout_unpressed"/>
</selector>
где layout_pressed и layout_unpressed являются макеты, как это:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/icon_pressed"
android:layout_alignParentLeft="true"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_marginLeft="35dp"
android:textColor="@color/red"
android:textSize="@dimen/fontSmall"/>
</RelativeLayout>
И странно я во время выполнения мое приложение бросает ошибку:
89): FATAL EXCEPTION: main
02-22 11:22:40.422: E/AndroidRuntime(9089): java.lang.RuntimeException: Unable to start activity ComponentInfo {com.test.myapp/com.test.myapp.activities.TabsActivity}: android.content.res.Resources$NotFoundException: File res/drawable-hdpi/tab3_selector.xml from drawable resource ID #0x7f020010
02-22 11:22:40.422: E/AndroidRuntime(9089): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2185)
02-22 11:22:40.422: E/AndroidRuntime(9089): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2210)
02-22 11:22:40.422: E/AndroidRuntime(9089): at android.app.ActivityThread.access$600(ActivityThread.java:142)
02-22 11:22:40.422: E/AndroidRuntime(9089): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1208)
02-22 11:22:40.422: E/AndroidRuntime(9089): at android.os.Handler.dispatchMessage(Handler.java:99)
02-22 11:22:40.422: E/AndroidRuntime(9089): at android.os.Looper.loop(Looper.java:137)
02-22 11:22:40.422: E/AndroidRuntime(9089): at android.app.ActivityThread.main(ActivityThread.java:4931)
02-22 11:22:40.422: E/AndroidRuntime(9089): at java.lang.reflect.Method.invokeNative(Native Method)
02-22 11:22:40.422: E/AndroidRuntime(9089): at java.lang.reflect.Method.invoke(Method.java:511)
02-22 11:22:40.422: E/AndroidRuntime(9089): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
02-22 11:22:40.422: E/AndroidRuntime(9089): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558)
02-22 11:22:40.422: E/AndroidRuntime(9089): at dalvik.system.NativeStart.main(Native Method)
02-22 11:22:40.422: E/AndroidRuntime(9089): Caused by: android.content.res.Resources$NotFoundException: File res/drawable-hdpi/tab1_selector.xml from drawable resource ID #0x7f020010
02-22 11:22:40.422: E/AndroidRuntime(9089): at android.content.res.Resources.loadDrawable(Resources.java:1947)
02-22 11:22:40.422: E/AndroidRuntime(9089): at android.content.res.Resources.getDrawable(Resources.java:659)
02-22 11:22:40.422: E/AndroidRuntime(9089): at com.test.myapp.activities.TabsActivity.onCreate(TabsActivity.java:39)
02-22 11:22:40.422: E/AndroidRuntime(9089): at android.app.Activity.performCreate(Activity.java:5008)
02-22 11:22:40.422: E/AndroidRuntime(9089): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
02-22 11:22:40.422: E/AndroidRuntime(9089): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2139)
02-22 11:22:40.422: E/AndroidRuntime(9089): ... 11 more
02-22 11:22:40.422: E/AndroidRuntime(9089): Caused by: android.content.res.Resources$NotFoundException: File res/drawable-
hdpi/layout_pressed.xml from drawable resource ID #0x7f020016
02-22 11:22:40.422: E/AndroidRuntime(9089): at android.content.res.Resources.loadDrawable(Resources.java:1947)
02-22 11:22:40.422: E/AndroidRuntime(9089): at android.content.res.Resources.getDrawable(Resources.java:659)
02-22 11:22:40.422: E/AndroidRuntime(9089): at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:173)
02-22 11:22:40.422: E/AndroidRuntime(9089): at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:881)
02-22 11:22:40.422: E/AndroidRuntime(9089): at android.graphics.drawable.Drawable.createFromXml(Drawable.java:818)
02-22 11:22:40.422: E/AndroidRuntime(9089): at android.content.res.Resources.loadDrawable(Resources.java:1944)
02-22 11:22:40.422: E/AndroidRuntime(9089): ... 16 more
02-22 11:22:40.422: E/AndroidRuntime(9089): Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #2: invalid drawable tag RelativeLayout
02-22 11:22:40.422: E/AndroidRuntime(9089): at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:877)
02-22 11:22:40.422: E/AndroidRuntime(9089): at android.graphics.drawable.Drawable.createFromXml(Drawable.java:818)
02-22 11:22:40.422: E/AndroidRuntime(9089): at android.content.res.Resources.loadDrawable(Resources.java:1944)
02-22 11:22:40.422: E/AndroidRuntime(9089): ... 21 more
Что это означает, что я не могу использовать в TabHost tabs setIndicator (селектор с макетами)?
У вас есть ресурсы $ NotFoundException в файле res/drawable-hdpi/layout_pressed.xml проверьте, что у вас есть все ресурсы, которые вы используете в этом макете - значок, цвет, размер –
ваш лог-код показывает, что tab1_selector.xml не найден в папке res/drawable-hdpi/tab1_selector.xml –
, вы можете переместить файл tab1_selector.xml в drawable -hdpi для тестирования –