1

まず第一に、私はアンドロイドに非常に慣れていないので、それについてあまり知りません.私はそれをいじってみようとしてい ます. 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の下に3つの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>

今、ドローアブルの下にあるこれらの 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_.]
4

6 に答える 6

1

ファイルの名前が問題を引き起こしていると思います.photo-hoverとphoto-unhoverの名前をphoto_hoverとphoto_unhoverに変更して、動作するかどうかを確認してください...

于 2013-01-12T07:04:36.523 に答える
1

Android リソース ファイル名には'-'大文字を含めないでください。上記のエラーは、ファイル名に'-'char が含まれていることを示しています。したがって、'-'as under score を変更し'_'ます。描画可能な画像ファイルを次のように変更します。

于 2013-01-12T08:24:01.937 に答える
1

あなたの間違いに耳を傾けてください!

失礼に聞こえるつもりはありませんが、問題は開いている窓の外にある拡声器付きの石鹸箱にあります。

res\drawable-xhdpi\video-unhover.png: 無効なファイル名: [a-z0-9_.] のみを含める必要があります

[a-z0-9_.] のみを含める必要があります。これは、XML ファイル名で小文字aからz、数字0から9_および文字のみが許可されていることを示しています。.ファイル名にはハイフンが含ま-れています。

于 2013-01-12T08:31:11.690 に答える
0

存在しないリソース (icon_photos_tab) を参照しようとしているようです。その名前のドローアブル フォルダーにリソース (XML ドローアブルまたは PNG など) が必要です。

幸運を。

于 2013-01-12T06:41:19.093 に答える
0

このエラーの背後にある理由は、xml ファイルの一部にエラーがあるためです。

res/ フォルダをチェックして、そこに含まれるすべてのファイルにエラーがないことを確認してください。エラーが発生します。

于 2013-01-12T06:42:06.250 に答える
0

XML ファイルを /res/drawable フォルダーに配置したことは確かですか? プロジェクトのクリーニングと再構築も役立つ場合があります。

于 2013-01-12T06:43:31.090 に答える