2011-11-16 10 views
6

私は、デバイスがタブレットか携帯電話かに応じて、アクティビティのテーマをどのように変更できるのかと思いました。私はそれに@android:style/Theme.Black.NoTitleBarテーマを持っている設定活動があります。タブレットでは、このアクティビティのテーマが好きです。@android:style/Theme.DialogデバイスがAndroidタブレットか携帯電話かに応じて異なるテーマを使用してください

私はManifest.xmlファイルのアクティビティのテーマを選択しましたが、このマニフェストファイルのタブレットバージョンはありません。

このアクティビティのテーマを変更するにはどうすればよいですか?アクションバーを隠すために、他のアクティビティのテーマを変更することもできます。

答えて

9

あなたが動的に設定することができますこのような各アクティビティの内部:

protected void onCreate(Bundle icicle) { 

    super.onCreate(icicle); 

    // ... 

    // Call setTheme before creation of any(!) View. 

    if(isTablet()) { 
     setTheme(android.R.style.Black); 
    } 
    else { 
     setTheme(android.R.style.Theme_Dark); 
    }  
    // ... 

    setContentView(R.layout.main); 
} 

今度はisTabletメソッドが必要ですが、デバイスタイプを検出するのは少し難しいです。ここで私はオンラインで見つける方法があり、それは、画面サイズをチェックし、画面が大きい場合には、現在のデバイスがタブレット:アイデア

public boolean isTablet() { 
    try { 
     // Compute screen size 
     DisplayMetrics dm = context.getResources().getDisplayMetrics(); 
     float screenWidth = dm.widthPixels/dm.xdpi; 
     float screenHeight = dm.heightPixels/dm.ydpi; 
     double size = Math.sqrt(Math.pow(screenWidth, 2) + 
           Math.pow(screenHeight, 2)); 
     // Tablet devices should have a screen size greater than 6 inches 
     return size >= 6; 
    } catch(Throwable t) { 
     Log.error(TAG_LOG, "Failed to compute screen size", t); 
     return false; 
    } 

} 
+0

ありがとう、それはperfektを働いた! – Georg

10

tyle resource fileにカスタムテーマ(単にデフォルトのテーマを指す場合があります)を記述し、そのテーマをマニフェストで参照できます。

次に、いくつかの基準に基づいてalternative resourcesを指定することができます(異なる密度のドロワーブルと同様ですが、たとえば最小画面サイズやAPIレベルを指定するなど)。

Manifext:

<application android:theme="@style/CustomTheme"> 

のres /値/のstyles.xml:

<style name="CustomTheme" parent="android:Theme.Black.NoTitleBar" /> 

のres /値-V11 /のstyles.xml:

<style name="CustomTheme" parent="android:Theme.Dialog" /> 
+0

おかげで想定しています。主な問題は、デバイスがタブレットであるかどうかに基づいて、特定のアクティビティだけをダイアログまたはフルスクリーンアクティビティにすることです。電話では、アクティビティはタブバーに、タブレットではダイアログになります。 あなたの解決策では、私はそれをどのように達成できるかわかりません。 – Georg

+1

@Georg:特定の要素のアンドロイド:テーマを指定しようとするかもしれません。 – ron

+0

あなたは、各アクティビティのテーマにして、タブレットに必要なものを値-xlarge/style.xmlに "上書き"する必要がありますか? – Georg

関連する問題