Seguendo la risposta di Ginny , penso che il modo più affidabile per farlo sia il seguente:
Come descritto qui , inserisci un valore booleano nelle risorse sw600dp. Deve avere il prefisso sw altrimenti non funzionerà correttamente:
in res / valori-sw600dp / dimens.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="isTablet">true</bool>
</resources>
in res / valori / dimens.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="isTablet">false</bool>
</resources>
Quindi crea un metodo per recuperare quel booleano:
public class ViewUtils {
public static boolean isTablet(Context context){
return context.getResources().getBoolean(R.bool.isTablet);
}
}
E un'attività di base che si estende dalle attività in cui si desidera questo comportamento:
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!ViewUtils.isTablet(this)) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
}
Quindi ogni attività estenderebbe BaseActivity:
public class LoginActivity extends BaseActivity //....
Importante : anche se estendi da BaseActivity
, devi aggiungere la linea android:configChanges="orientation|screenSize"
a ciascuno Activity
nel tuo AndroidManifest.xml:
<activity
android:name=".login.LoginActivity"
android:configChanges="orientation|screenSize">
</activity>
layout-land
internares
.