0

actionBar Style Generator から actionBar を作成し、アプリにスタイルをコピーして貼り付けました。tabwidget を使用してスタック タブの UI を作成しました。しかし、android:theme="@style/Theme.Customtheme" のようなマニフェスト ファイルでこのアクションバー スタイルを使用すると、アクション バー スタイル ジェネレーターで作成されたアクションバー (バージョン 4.2) とルック アンド フィールが異なります。2 つ目は、Android 2.3.3 でアプリケーションを実行すると、Android 4.2 とは異なるルック アンド フィールが表示されることです。すべてのバージョンで同じルック アンド フィールが必要で、すべてのバージョンをサポートするために sherlock ライブラリを使用しています。私はたくさんゴーグルしましたが、完璧な解決策が得られません.誰かが答えを提案してください. 前もって感謝します。

以下は私のコードです

public class CustomActivity extends SherlockFragmentActivity {
TabHost tHost;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_custom);

        tHost = (TabHost) findViewById(android.R.id.tabhost);
        tHost.setup();

        /** Defining Tab Change Listener event. This is invoked when tab is changed */
        TabHost.OnTabChangeListener tabChangeListener = new TabHost.OnTabChangeListener() {

            @Override
            public void onTabChanged(String tabId) {
                FragmentManager fm =   getSupportFragmentManager();
                ResidentialFragment resdentialFragment = (ResidentialFragment) fm.findFragmentByTag("residential");
                CommercialFragment commercialFragment = (CommercialFragment) fm.findFragmentByTag("commercial");
                FragmentTransaction ft = fm.beginTransaction();

                if (resdentialFragment!=null) {
                    ft.detach(resdentialFragment);
                }       
                /** Detaches the commercialfragment if exists */
                if (commercialFragment!=null) {
                    ft.detach(commercialFragment);
                }
                /** If current tab is residential */
                if(tabId.equalsIgnoreCase("residential")){

                    if(resdentialFragment==null){
                        /** Create residentialFragment and adding to fragmenttransaction */
                        ft.add(R.id.realtabcontent,new ResidentialFragment(), "residential");
                    }else{
                        /** Bring to the front, if already exists in the fragmenttransaction */
                        ft.attach(resdentialFragment);
                    }

                }else{    /** If current tab is apple */
                    if(commercialFragment==null){
                        /** Create AppleFragment and adding to fragmenttransaction */
                        ft.add(R.id.realtabcontent,new CommercialFragment(), "commercial");
                     }else{
                        /** Bring to the front, if already exists in the fragmenttransaction */
                        ft.attach(commercialFragment);
                    }
                }
                ft.commit();
            }
        };

        /** Setting tabchangelistener for the tab */
        tHost.setOnTabChangedListener(tabChangeListener);

        /** Defining tab builder for residential tab */
        TabHost.TabSpec tSpecResidential = tHost.newTabSpec("residential");
        tSpecResidential.setIndicator("Residential");
        tSpecResidential.setContent(new DummyTabContent(getBaseContext()));
        tHost.addTab(tSpecResidential);

        /** Defining tab builder for commercial tab */
        TabHost.TabSpec tSpecComm = tHost.newTabSpec("commercial");
        tSpecComm.setIndicator("Commercial");
        tSpecComm.setContent(new DummyTabContent(getBaseContext()));
        tHost.addTab(tSpecComm);

    }
}

以下は私のマニフェストファイルです

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.customactivity"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="4"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher">
        <activity
            android:name="com.example.customactivity.CustomActivity"
            android:label="@string/projects"
            android:theme="@style/Theme.Customtheme" 
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.example.customactivity.ResidentialFragment"
            android:label="@string/title_activity_residential" >
        </activity>
        <activity
            android:name="com.example.customactivity.CommercialFragment"
            android:label="@string/title_activity_commercial" >
        </activity>

    </application>

</manifest>

ここでは、必要なルック アンド フィールを添付しています。

ここに画像の説明を入力

バージョン 4.2 の次の画像

ここに画像の説明を入力

バージョン 2.3.3 の次の画像

ここに画像の説明を入力

4

1 に答える 1

0

まず第一に、Android のすべてのバージョン (ほぼ) に対して同じスタイルを作成する必要がありますActionBarActionBarSherlockたとえば、アプリのこれらのフォルダーにstyles.xmlとを作成する必要がありますtheme.xml

- res
 -- values
   -- styles.xml
   --themes.xml
 -- values-11
   -- styles.xml
   -- themes.xml
 -- values-14
   -- styles.xml
   -- themes.xml

これらのフォルダー/ファイルでは、さまざまな種類のインジケーターを使用する必要があります。デフォルト値フォルダーではTheme.Sherlock、親またはカスタム テーマとして (名前がわからない) を使用する必要があり、前にactionbarStyle:なくandroid:、 のようなインジケーターを使用してスタイルを設定する必要があります。values-14たとえば、カスタムテーマの親テーマとして使用し、そこでTheme.Holoアクションバーのスタイルを設定する必要がありますandroid:actionbarStyle(値の名前を覚えているため)。

したがって、すべてのバージョンで同じように見えるようにアクション バーのスタイルを設定する場合は、異なるバージョンでこれらのスタイルに注意する必要があります。

于 2013-03-21T08:34:08.163 に答える