ここでは、アプリ全体について説明しています。ActionBarStyle GeneratorからActionBarを作成し、そのスタイルをアプリに追加しました。私はすべてのAndroidバージョンをサポートするためにSherLockLibraryを使用しています。android:theme = "@ style/Theme.Customtheme"のようなマニフェストファイルからスタイルを適用しました。しかし、UIのルックアンドフィールは、3.0を超えるバージョンと3.0未満のバージョンでは異なります。次の図2と図3を参照してください。すべてのバージョンのAndroidで同じルックアンドフィールが必要です。私はマニフェストで自分のスタイルを書いたが、同じルックアンドフィールを示していなかった。私のアプリには、SherlockFragmentActivityを拡張する4つのクラスの最初のアクティビティがあり、他の2つはSherlockListFragmentを拡張するfragmentです。
誰もが上記のことを行うための別のオプションがあり、Androidバージョンの互換性とルックアンドフィールの問題を解決するための良い解決策を私に提供してください。
私はたくさんゴーグルし、stackoverflowについて2回質問しましたが、適切な回答が得られませんでした。完璧な質問ができなかったかもしれないので、誰かが完璧な答えをくれたらいいのにと思います。前もって感謝します
ここにルックアンドフィールを付けています。私が欲しいfig.1オリジナルスタイル、4.2バージョンのfig.2ビュー、2.3.3バージョンのfig.3ビュー
以下はマニフェストファイルです
<activity
android:name="com.example.customactivity.CustomActivity"
android:label="@string/projects"
android:theme="@style/Theme.Customtheme" >
.
.
スタックタブのレイアウトは次のとおりです
<TabHost
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0"
/>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="0"
/>
<FrameLayout
android:id="@+id/realtabcontent"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
</LinearLayout>
</TabHost>
以下は主なアクティビティコードです
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();
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);
}
}