После ответа Джинни , я думаю, что самый надежный способ сделать это заключается в следующем:
Как описано здесь , поместите логическое значение в ресурсы sw600dp.Он должен иметь префикс sw , иначе он не будет работать должным образом:
в res / values-sw600dp / sizess.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="isTablet">true</bool>
</resources>
в res / values /dimensions.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="isTablet">false</bool>
</resources>
Затем создайте метод для получения этого логического значения:
public class ViewUtils {
public static boolean isTablet(Context context){
return context.getResources().getBoolean(R.bool.isTablet);
}
}
И базовое действие, расширяемое от действий, для которых необходимо это поведение:
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!ViewUtils.isTablet(this)) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
}
Таким образом, каждое действие будет расширять BaseActivity:
public class LoginActivity extends BaseActivity //....
Важно : даже если вы расширяете с BaseActivity
, вы должны добавить строку android:configChanges="orientation|screenSize"
к каждому Activity
в вашем AndroidManifest.xml:
<activity
android:name=".login.LoginActivity"
android:configChanges="orientation|screenSize">
</activity>