2016-06-02 12 views
2

AndroidManifestのアクティビティscreenOrientationをgradleのbuild.configから動的に設定する方法はありますか?AndroidManifestのアクティビティを設定するscreen flotごとに異なる

私は、回転を可能にするフレーバーと、肖像画のみである別のフレーバーを持つ必要があります。

私はhttp://tools.android.com/tech-docs/new-build-system/user-guide/manifest-mergerを通して読んだことがありますが、その例は通常の文字列ラベルでしか機能しないようです。

私は2つの方法を試みました。 GradleののmanifestPlaceholdersで

: build.gradle:AndroidManifest.xmlを持つ

productFlavors { 
    flavorRotation { 
    manifestPlaceholders = [ROTATION_PREF: "unspecified"] 
    } 
    flavorNoRotation { 
    manifestPlaceholders = [ROTATION_PREF: "portrait"] 
    } 
} 

... 
    <activity android:name=".ui.ActivityName" 
    android:screenOrientation="${ROTATION_PREF}"/> 
... 

これは動作するようには思えない、エラーが与えられていないが、回転ISN」私が "flavorNoRotation"を構築するときに肖像画にロックされていません。


とのGradleのresValueで試してみました: build.gradle:マニフェストと

productFlavors { 
    flavorRotation { 
    resValue "string", "orientation", "unspecified" 
    } 
    flavorNoRotation { 
    resValue "string", "orientation", "portrait" 
    } 
} 

... 
<activity android:name=".ui.ActivityName" 
    android:screenOrientation="@string/orientation"/> 
... 

この方法で、それは罰金のビルドが、私は、デバイスにインストールしようとすると、それだけで失敗しますAndroidスタジオにメッセージ: "メッセージINSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTIONでインストールできませんでした。 既存のバージョンのapkをアンインストールして再インストールすると、この問題が解決される可能性があります。

「OK」をクリックすると、「APKのインストール中にエラーが発生しました。だから、 、どのような方法があり、ビルドタイプ/味の間で異なる向きを持っている

私はBaseActivityでプログラムこれを行うことを避けることを好むだろう


編集:?。 申し訳ありませんが、私が試しましたsの周りを遊ぶ私が実際に試した最初の方法はうまくいきます。自分のデバイスに間違ったビルドフレーバーをインストールすることで、私は早期にミスを犯したに違いない。

唯一の問題は、Android Studioの上に警告を与えることです:それは罰金と仕事構築していきますが、「アンドロイドscreenOrientation =」$ {ROTATION_PREFは}」プロパティは、それはそれを見つけることができないと言って

ありがとう。 。解答の試行

+0

私も同様の問題に直面していますが、私の場合、@stringリソースを使用してlaunchModeを調整しようとしていますが、エラーなしで正常にビルドできますが、インストールによってINSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTIONが与えられ、 –

+1

@DavidCheung私がやった最初の方法を試してみてください。私はlaunchmodeで試してコンパイルして、うまくインストールします。例えば。 build.gradle:manifestPlaceholders = [LAUNCHMODE: "singleTop"]次にAndroidManifestで:。私は文字列リソースで試してみたときと同じ問題がありました。 – jesobremonte

答えて

0
1-Create screen.xml file inside res/values folder and code 

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="screen_type">phone</string> 
</resources> 

2-In your activity inside onCreate() after setContentView() check device type 

//checking tablets and phones 
String screenType = getResources().getString(R.string.screen_type); if (screenType.equals("7-inch-tablet") || screenType.equals("10-inch-tablet")) { 

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

} else { 

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
} 

はそれに役立つことを願っています

+1

これは質問に答えません。 OPは彼のgradleファイルからこれをやりたがっています。 –

0

ないそのように私がやったことはこれである;。。あなたがしたいレイアウトの種類をチェックし、「親」の活動のクラスを作成しますこのようなものを使用してください。(子アクティビティ)そしてここでビルドバージョンをチェックすることができます。

public class DaddyActivity extends Activity { 

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

     // set landscape or portrait 
     if (getResources().getBoolean(R.bool.landscape)) { 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
     } else { 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
     } 
    } 
} 

これは、1つのブール値:ランドスケープだけを持つXMLを探します。

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <bool name="landscape">false</bool> 
</resources> 
0

洗面所独立ソースファイル

元) .../srcに/ flavorRotation/RES /値/のstrings.xml

<string name="orientation">unspecified</string>

:これは(通常画面用)がXMLであります

.../srcに/メイン/ resを/値/のstrings.xml

<string name="orientation">portrait</string>

関連する問題