Siguiendo la respuesta de Ginny , creo que la forma más confiable de hacerlo es la siguiente:
Como se describe aquí , coloque un valor booleano en los recursos sw600dp. Debe tener el prefijo sw; de lo contrario, no funcionará correctamente:
en res / values-sw600dp / dimens.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="isTablet">true</bool>
</resources>
en res / values / dimens.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="isTablet">false</bool>
</resources>
Luego haga un método para recuperar ese booleano:
public class ViewUtils {
public static boolean isTablet(Context context){
return context.getResources().getBoolean(R.bool.isTablet);
}
}
Y una actividad base para extender desde las actividades donde desea este comportamiento:
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!ViewUtils.isTablet(this)) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
}
Entonces, cada actividad ampliaría BaseActivity:
public class LoginActivity extends BaseActivity //....
Importante : incluso si se extiende desde BaseActivity
, debe agregar la línea android:configChanges="orientation|screenSize"
a cada uno Activity
en su AndroidManifest.xml:
<activity
android:name=".login.LoginActivity"
android:configChanges="orientation|screenSize">
</activity>
layout-land
unares
carpeta interna .