为什么我无法访问drawable下的xml文件?

时间:2013-01-12 06:31:16

标签: java android

首先,我对android非常新,我不太了解它。我正在尝试使用它,我现在正在遵循本教程: http://www.androidhive.info/2011/08/android-tab-layout-tutorial/

我创建了一个类,如下所示

package com.example.tabbedactivity;

import android.app.TabActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;

public class TabbedActivity extends TabActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tabbed);

        TabHost tabHost = getTabHost();

        // Tab for Photos
        TabSpec photospec = tabHost.newTabSpec("Photos");
        // setting Title and Icon for the Tab
        photospec.setIndicator("Photos", getResources().getDrawable(R.drawable.icon_photos_tab));
        Intent photosIntent = new Intent(this, PhotosActivity.class);
        photospec.setContent(photosIntent);

        // Tab for Songs
        TabSpec songspec = tabHost.newTabSpec("Songs");
        songspec.setIndicator("Songs", getResources().getDrawable(R.drawable.icon_songs_tab));
        Intent songsIntent = new Intent(this, SongsActivity.class);
        songspec.setContent(songsIntent);

        // Tab for Videos
        TabSpec videospec = tabHost.newTabSpec("Videos");
        videospec.setIndicator("Videos", getResources().getDrawable(R.drawable.icon_videos_tab));
        Intent videosIntent = new Intent(this, VideosActivity.class);
        videospec.setContent(videosIntent);

        // Adding all TabSpec to TabHost
        tabHost.addTab(photospec); // Adding photos tab
        tabHost.addTab(songspec); // Adding songs tab
        tabHost.addTab(videospec); // Adding videos ta
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_tabbed, menu);
        return true;
    }

}

因此我在drawable下制作了三个xml文件,如下所示 icon_photos_tab.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- When selected, use grey -->
    <item android:drawable="@drawable/photo-hover"
          android:state_selected="true" />
    <!-- When not selected, use white-->
    <item android:drawable="@drawable/photo-unhover" />
</selector>

icon_songs_tab.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- When selected, use grey -->
    <item android:drawable="@drawable/music-hover"
          android:state_selected="true" />
    <!-- When not selected, use white-->
    <item android:drawable="@drawable/music-unhover" />
</selector>

icon_videos_tab.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- When selected, use grey -->
    <item android:drawable="@drawable/video-hover"
          android:state_selected="true" />
    <!-- When not selected, use white-->
    <item android:drawable="@drawable/video-unhover" />
</selector>

现在,当我尝试在drawable下访问这些xml文件时,IDE显示问题,正好是下面显示的代码行,这些代码行是TabbedActivity.java(我上面显示的类)的一部分

TabSpec songspec = tabHost.newTabSpec("Songs");
            songspec.setIndicator("Songs", getResources().getDrawable(R.drawable.icon_songs_tab));


TabSpec photospec = tabHost.newTabSpec("Photos");
            // setting Title and Icon for the Tab
            photospec.setIndicator("Photos", getResources().getDrawable(R.drawable.icon_photos_tab));


TabSpec videospec = tabHost.newTabSpec("Videos");
            videospec.setIndicator("Videos", getResources().getDrawable(R.drawable.icon_videos_tab));

错误说

  

此行有多个标记      - icon_photos_tab无法解析或不是字段      - R.drawable无法解析为变量

究竟可能是什么问题。(我真的很想安卓。这是我的第一个应用程序,我没有经历任何理论)

更新 我在控制台上看到了错误

[2013-01-12 12:32:02 - TabbedActivity] res\drawable-ldpi\video-hover.png: Invalid file name: must contain only [a-z0-9_.]
[2013-01-12 12:32:02 - TabbedActivity] res\drawable-mdpi\video-hover.png: Invalid file name: must contain only [a-z0-9_.]
[2013-01-12 12:32:02 - TabbedActivity] res\drawable-xhdpi\video-hover.png: Invalid file name: must contain only [a-z0-9_.]
[2013-01-12 12:32:02 - TabbedActivity] res\drawable-hdpi\video-unhover.png: Invalid file name: must contain only [a-z0-9_.]
[2013-01-12 12:32:02 - TabbedActivity] res\drawable-ldpi\video-unhover.png: Invalid file name: must contain only [a-z0-9_.]
[2013-01-12 12:32:02 - TabbedActivity] res\drawable-mdpi\video-unhover.png: Invalid file name: must contain only [a-z0-9_.]
[2013-01-12 12:32:02 - TabbedActivity] res\drawable-xhdpi\video-unhover.png: Invalid file name: must contain only [a-z0-9_.]

6 个答案:

答案 0 :(得分:1)

我认为文件的名称会产生问题。请将照片悬停和照片取消悬停的名称更改为photo_hover和photo_unhover,看看它是否有效......

答案 1 :(得分:1)

android资源文件名不应包含'-'或大写字母。上述错误表明文件名包含'-'个字符。因此,将'-'更改为得分'_'。像这样更改你的可绘制图像文件。

答案 2 :(得分:1)

聆听您的错误!

我并不是说听起来很粗鲁,但问题出现在打开的窗户外面的肥皂盒上,带有扬声器:

  

res \ drawable-xhdpi \ video-unhover.png:文件名无效:必须只包含[a-z0-9 _。]

必须仅包含[a-z0-9 _。] ,这会告诉您只有小写字符az,数字0到{ {1}},XML文件名中允许使用9_个字符。您的文件名中包含连字符.

答案 3 :(得分:0)

在我看来,您正在尝试引用不存在的资源(icon_photos_tab)。您需要一个具有该名称的drawable文件夹中的资源(XML drawable或PNG或其他东西)。

祝你好运。

答案 4 :(得分:0)

此错误背后的原因是某些xml文件中存在错误。

检查您的资源/文件夹,以确保其中包含的每个文件都没有错误。 它会导致错误。

答案 5 :(得分:0)

您确定已将XML文件放在/ res / drawable文件夹下吗?清理和重建项目也可能有所帮助。