2012-07-28 44 views
2

試圖設置方位清單文件,使用字符串預選賽某些設備忽略清單字符串資源,分析錯誤

android:screenOrientation="@string/orientation" 

工程上的4.0華碩平板電腦,但未能在兩個2.1野火和4.1的Galaxy S 問題是事實上鍊接到一個資源,如果肖像輸入它的作品。

我曾嘗試更改平板電腦中使用的限定符以在手機上進行測試。這意味着所有設備都使用完全相同的代碼,資源和佈局。所以它不能拼寫錯誤或建立問題。但它仍然在手機上,而不是在平板電腦上。這似乎是Android中的又一個bug。

給出了下面的錯誤,沒有在logcat的

Installation error: INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION 
Please check logcat output for more details. 
Launch canceled! 

清單部分

<activity 
    android:name=".MainActivity" 
     android:screenOrientation="@string/orientation" 
     android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

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

我知道我可以編程方式做到這一點。但是與野火有關的另一個問題是,沒有立即重啓。相反,它會等待視圖被設置等。這不會發生在其他設備中。

谷歌搜索和發現了一些其他人使用的方法,但他們似乎沒有發現任何問題。 http://capdroid.wordpress.com/2012/07/21/different-screen-orientation-on-different-screen-size

感謝

+0

但到底爲什麼要這麼做?有什麼優勢? – Squonk 2012-07-28 19:11:38

+1

清潔代碼。 但更多的是因爲我在野火上發現的問題,如果在OnCreate中調用,似乎要等一會才能旋轉。它也是一個它應該起作用的例子。如果它不應該報告。因爲據我所知,它是一個需要修復的未知錯誤。感謝您的評論。 順便說一句,如果它不清楚不同的值正在使用不同的資格文件夾值-W800等 – McP 2012-07-28 19:15:33

+0

等等!爲什麼要將它卸載到字符串資源中?只要硬編碼,它就會起作用...有些人認爲他們「聰明」的事情!說實話 - 從來沒有見過這個,不關心它是否符合*更清晰的代碼* ...這就像試圖比編譯器更聰明,並寫了一個簡潔/模糊的例程,認爲它會比運行速度更快編譯器發出/生成.. – t0mm13b 2012-07-28 19:27:56

回答

3

試圖設置方位清單文件,使用字符串預選賽

雖然這是當你輸入到你的編輯字符串,據我所知它實際存儲爲系統中的整數,因此從字符串資源轉換不太可靠。坦率地說,我很驚訝它可以在這款平板電腦上運行 - 設備製造商可能已經增加了對它的支持來處理他們自己的應用程序之一。

雖然您可以在清單中使用字符串資源,但它們需要是以字符串形式存儲的內容(例如,android:label)。

可能能夠得到這個與整數資源一起工作,查找用於這些常量的值(可能與它們的Java等價物相同)。

這似乎是android中的另一個bug。

對我來說,這似乎是另一個地方,開發人員超越了記錄行爲的範圍,然後想知道爲什麼無證行爲不起作用。

+0

我知道我寫的第二個 「這似乎是Android中的又一個bug。「,我會後悔的,我遇到了一些記錄和接受的錯誤,他們只是把我磨損了,謝謝你的回答,以及其實際上是enum的補充說明 – McP 2012-07-28 20:07:16

+0

@McP:如果你嘗試整數資源的方法,它的工作原理,你想到它,在這裏發表評論。你想做什麼是完全合理的(即使我不是'android:screenOrientation'設置爲固定方向的大粉絲) 。如果清單文檔描述了您可以用於不同屬性的資源的類型和值,它肯定會很有用。採用「true」或「false」的屬性可以使用布爾資源和自由形式的文本(例如' – CommonsWare 2012-07-28 20:32:51

+0

不幸的是文件夾修飾符會被忽略,所以layout-w800dp最終會從佈局中加載值,所以我們沒有這樣做。 這是我在嘗試使用字符串時最初期望的。具有諷刺意味的是它不會考慮文件夾限定符的變壓器。在啓動時它是一個字符串,這是很奇怪的。 感謝您的幫助。只是總結整數作品,但使用w800dp文件夾限定符的不同值不會。它可能適用於其他限定符。 – McP 2012-07-30 12:57:18

2

閱讀official developer document以確定哪些由指示的符號形式,通過把它變成一個字符串資源將產生解析錯誤,如圖中的OP的問題。不,我不會跳到結論,將它歸類爲「bug」,對於每個人和他們自己,一些製造商可以自由地實施自己的機制來處理它,而其他人則堅持谷歌的方式源代碼。

5

我有同樣的問題,我已經用一個整數值,而不是一個字符串值,並在「的onCreate」方法設置方位解決它:

例子:

值/ strings.xml中

<resources> 

    <integer name="orientation">1</integer> 
... 

值-sw600dp/strings.xml中

<resources> 
    <integer name="orientation">0</integer> 
</resources> 

然後,在y中我們的onCreate:

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     this.setRequestedOrientation(getResources().getInteger(R.integer.orientation)); 

每個方向有一個整數值,看到這個頁面瞭解詳情:http://developer.android.com/reference/android/R.attr.html#screenOrientation