2010-12-15 8 views
2

私はこのようなレイアウトmain.xmlで自分のアプリケーションを起動します。変更アンドロイドレイアウトをプログラム

​​

と設定メニューで、ユーザがそのレイアウトこれです別のレイアウト、小さい(tiny.xml)、選択することができます。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout android:id="@+id/relative" xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" android:layout_height="fill_parent"> 
    <TabHost android:id="@android:id/tabhost" ...> 
     <LinearLayout ...> 
      <TabWidget.../> 
      <FrameLayout android:id="@android:id/tabcontent"...> 
      </FrameLayout> 
     </LinearLayout> 
    </TabHost> 
</RelativeLayout> 

mainActivityTabActivityを拡張し、onCreate方法で:

...

if (isTiny()) 
setContentView(R.layout.tiny); 
else 
setContentView(R.layout.main); 
mTabHost = getTabHost(); 

TabSpec newsTab = mTabHost.newTabSpec(NewsActivity.static_getTabActivityTag()); 
newsIntent = new Intent(this, NewsActivity.class);  
newsTab.setContent(newsIntent); 
TextView textView = new TextView(this); 

textView.setText(getResources().getString(NewsActivity.static_getIndicatorStringID()); 
textView.setTextSize(size); 
textView.setTextColor(color); 
textView.setBackgroundDrawable(background); 
tab.setIndicator(textView); 
mTabHost.addTab(newsTab); 

アイデアは、ユーザーが彼のために新しいレイアウトをロードする設定パネルからレイアウトを変更した場合ので、mainActivity#onRestartにいくつかのコードを記述することです。それを達成する方法?私はsetContentView を使用しようとしましたが、ただちに がクラッシュし、再びタブのビューを作成しても動作しません。ビューは空白です。

ありがとうございます。

更新:アクティビティにタブを作成する方法が追加されました。

更新 setContentViewを複数回実行することは可能です。私の問題はインテントの活動に関連していました。

+0

クラッシュのスタックトレースとは何ですか? 'setContentView()'を複数回呼び出すことはOKですが、そうした後で 'View'参照を再バインドする必要があります(' findViewById'を実行する必要があります)。 –

+1

'setContentView'を2回行うことはできますが、その後にView参照を再初期化する必要があります(ビューごとにfindViewByIdメソッドを再度呼び出す、さまざまなリスナーを追加するなど) – ognian

+0

ちょうどチェックしてもクラッシュしません。ビューは機能しません。たぶん私はそれらを再バインドするのではなく、それらを再作成しているからでしょうか? – pakore

答えて

3

setContentViewは、onCreate内にある必要がないときはいつでも呼び出すことができます。私はSharedPreferencesを使用して、ユーザーが望むコンテンツビューを保存しました。お役に立てれば。

+0

setContentViewは一度だけ呼び出すことができますが、 – Falmarri

+0

を呼び出すことができます。何度でも呼び出すことができます。これは、onContentViewをonCreateの外で呼び出す複数のプロジェクトが必要です。編集:それは両方の時間を言っているそれはそれを行う方法は間違っていたと私はそれが別の活動を使用する方が良いと後悔した。この場合、Themeを使用するほうが良いかもしれませんが、これは許容できる解決策でもあります。 – schwiz

+0

質問をタブを作成するアクティビティのコードで更新しました。私はそれが助けて欲しいありがとう。 – pakore

関連する問題