Suite à la réponse de Ginny , je pense que le moyen le plus fiable de le faire est le suivant:
Comme décrit ici , mettez un booléen dans resources sw600dp. Il doit avoir le préfixe sw sinon cela ne fonctionnera pas correctement:
dans res / values-sw600dp / dimens.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="isTablet">true</bool>
</resources>
dans res / values / dimens.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="isTablet">false</bool>
</resources>
Ensuite, créez une méthode pour récupérer ce booléen:
public class ViewUtils {
public static boolean isTablet(Context context){
return context.getResources().getBoolean(R.bool.isTablet);
}
}
Et une activité de base à étendre à partir des activités pour lesquelles vous souhaitez ce comportement:
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!ViewUtils.isTablet(this)) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
}
Ainsi, chaque activité étendrait BaseActivity:
public class LoginActivity extends BaseActivity //....
Important : même si vous étendez de BaseActivity
, vous devez ajouter la ligne android:configChanges="orientation|screenSize"
à chacun Activity
dans votre AndroidManifest.xml:
<activity
android:name=".login.LoginActivity"
android:configChanges="orientation|screenSize">
</activity>
layout-land
interneres
.