1

画面の下部に 2 つのタブがある画面があります。アプリを実行すると、自動的に最初のタブがアクティブになり、その画面に関連するアクティビティが表示されます (画面 1)。次に、ユーザーが 2 番目のタブをクリックすると、別のアクティビティが開きます (画面 2)。

要件: 画面 1 を表示する代わりに、アプリの読み込み時に画面 0 を表示したい。ユーザーがいずれかのタブをクリックすると、それぞれの画面 (画面 1 と画面 2) のみが開きます。

どうやってするの?

私が使用したコードを以下に示します。

public class TabBarActivity extends TabActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.main);

        // Your Tab Titles
        String tab_title[] = { "Screen 1", "Screen 2"};

        // Your Tab Drawables for their states
        int tab_drawables[] = { R.drawable.tab_home_custom,
                R.drawable.tab_balance_custom};

        // Your Tab Activities
        Object tab_act[] = { TabB.class,TabC.class};

        // / TabHost setup
        final TabHost tabHost = (TabHost) findViewById(android.R.id.tabhost);
        tabHost.setup();

        TabSpec tab_spec ;

        for (int i = 0; i < tab_act.length; i++) {

                tab_spec = tabHost.newTabSpec(tab_title[i]);
                tab_spec.setIndicator(tab_title[i],
                        getResources().getDrawable(tab_drawables[i]));
                tab_spec.setContent(new Intent(this, (Class<?>) tab_act[i]));
                tabHost.addTab(tab_spec);

        }
        tabHost.setCurrentTab(0);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            TabBarActivity.this.finish();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
} 

スクリーンショット

4

3 に答える 3

0

新しいアクティビティであるスクリーン 0 を作成し、インテントを使用してタブ アクティビティであるスクリーン 1 とスクリーン 2 を開始するだけです。次に、このコードをアクティビティ宣言に追加することで、新しいアクティビティがランチャーとしてマークされるようにマニフェスト ファイルを変更できます。

<intent-filter>
    <action android:name="android.intent.action.MAIN"/>
    <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>

また、現在のタブ アクティビティからそのコードを削除する必要があります。

于 2013-03-06T11:22:23.657 に答える
0

これは、TabActivity が通常サポートするものではありません。

「ダミー」タブを追加することで、目的の効果を達成できる場合があります。

public class TabBarActivity extends TabActivity {

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.main);

    // Your Tab Titles
    String tab_title[] = { "", "Screen 1", "Screen 2"};

    // Your Tab Drawables for their states
    int tab_drawables[] = { R.drawable.tab_home_custom,
            R.drawable.tab_balance_custom};

    // Your Tab Activities
    Object tab_act[] = {Activity.class, TabB.class,TabC.class};

    // / TabHost setup
    final TabHost tabHost = (TabHost) findViewById(android.R.id.tabhost);
    tabHost.setup();

    TabSpec tab_spec ;

    for (int i = 0; i < tab_act.length; i++) {

            tab_spec = tabHost.newTabSpec(tab_title[i]);
            if(i>0) tab_spec.setIndicator(tab_title[i],
                    getResources().getDrawable(tab_drawables[i]));
            tab_spec.setContent(new Intent(this, (Class<?>) tab_act[i]));
            tabHost.addTab(tab_spec);

    }
    tabHost.setCurrentTab(0);
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        TabBarActivity.this.finish();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

}

これがタブバーに空白のタブボタンを作成するかどうかはわかりませんが

于 2013-03-06T11:23:27.473 に答える
0

アプリのロゴが表示されたスプラッシュ スクリーンが必要だと思います。別のアクティビティを作成し、そこから tabActivity に移動する必要があります。

public class splash2 extends Activity{


    protected boolean _active = true;
    protected int _splashTime = 2000;
    Intent intent;
    Runnable r;
    Handler handler;
    /** Called when the activity is first created. */

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ( keyCode == KeyEvent.KEYCODE_MENU ) {
            getWindow().setSoftInputMode(
                    WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splashlayout2);

        //   startActivity(new Intent(splash2.this,splash1.class));
        // thread for displaying the SplashScreen

        handler = new Handler();

        r=new Runnable() {
            public void run() {

                intent = new Intent(splash2.this, TabBarActivity .class);
                //intent.setClass();
                startActivity(intent);

                finish();
            }

        };
        handler.postDelayed(r, _splashTime);

    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            handler.removeCallbacks(r);
            intent = new Intent();
            intent.setClass(splash2.this, Main_menu.class);
            startActivity(intent);
            overridePendingTransition( R.anim.slide_in_left2, R.anim.slide_out_left2 );
            finish();
        }
        return true;
    }

    @Override
    public void onBackPressed() {
        // TODO Auto-generated method stub

    }
}

TabBarActivity 内にこれらのタグを含める代わりに、このアクティビティのアクティビティ タグに次のタグを追加します。

<intent-filter>
    <action android:name="android.intent.action.MAIN"/>
    <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>

このスプラッシュ画面をデフォルトのアクティビティにします

于 2013-03-06T11:30:53.030 に答える