Bom dia, é possível definir um layout sempre rodando em landscape com fragment?
Quando a classe estende de activity sei que é preciso declarar no android manifest, mas e quando é fragment?
Grato
É possivel, sim.
Crie um layout com um “espaços vazios” para suportar fragments: um para a orientação portrait e outro para landscape:
Em res/layout-land/tela.xml
vou criar o layout landscape:
<FrameLayout
...
android:id="@+id/buraco">
</FrameLayout>
E em res/layout/tela.xml
vou criar o layout portrait:
<LinearLayout ... >
<TextView .../>
//...
</LinearLayout>
E uma activity para usar esse layout:
public class MinhaActivity extends Activity {
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.tela);
}
}
Agora, sempre que você virar a tela, o layout tela.xml com um FrameLayout
será chamado.
Para saber quando temos um layout ou outro, basta fazer assim:
Em res/values-land/bools.xml
crie uma constante:
<resources>
<bool name="tablet">true</bool>
</resources>
E algo semelhante em res/values/bools.xml
:
<resources>
<bool name="tablet">false</bool>
</resources>
Na MinhaActivity, basta buscar por essa constante para saber se temos que colocar um fragment na tela ou não:
public class MinhaActivity extends Activity {
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.tela);
if(isTablet()) {
FragmentTransaction tx = getFragmentManager().beginTransaction();
tx.replace(R.id.buraco, new MeuFragment());
tx.commit();
}
}
private boolean isTablet() {
return getResources().getBoolean(R.bool.tablet);
}
}