hoe u afzonderlijke lay-outs kunt bieden voor de staande en liggende modus in Android

Ik werk met een realtime app die via de applicatie tabbladen bevat. Wanneer ik probeer de richting tussen portret en landschap te wijzigen, heb ik een code om een ​​afzonderlijke lay-out voor landschap weer te geven. Hiervoor heb ik de methode onConfigurationChanged als volgt gebruikt

public void onConfigurationChanged(Configuration newConfig) {

    super.onConfigurationChanged(newConfig);
    if(newConfig.orientation==Configuration.ORIENTATION_PORTRAIT){
        setContentView(R.layout.eventslist);
    }else if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){
        setContentView(R.layout.eventstimeline);
    }
}

En ook in het manifestbestand voor die specifieke activiteit heb ik twee kenmerken als volgt gebruikt

android:screenOrientation="sensor"

android:configChanges="orientation|keyboardHidden"

Maar wanneer ik het apparaat roteer, kan ik de afzonderlijke lay-out voor de landschapsmodus niet zien die ik heb opgegeven in onConfigurationChanged . Ook wil ik de tabbladen niet in de landschapsmodus zien. Enig idee hierover.

1
is het mogelijk dat uw apparaat oriëntatiewijzigingen niet kan detecteren? op de OrientationEventListener heeft het een methode: canDetectOrientation ()
toegevoegd de auteur pdiddy, de bron

2 antwoord

In Bronnen kunt u voor elke richting een andere opmaak definiëren, vergelijkbaar met tekentafels met schermdichtheid.

Naast de map lay-out kunt u lay-outs aanbrengen in:

layout-port : layout for portrait orientation

layout-land : layout for landscape orientation

Natuurlijk moet je dezelfde naam gebruiken voor die lay-outs, hetzelfde als met drawables.

Stel dan gewoonInhoudweergave in (R.layout. thatlayout );

5
toegevoegd

Als het je niet uitmaakt dat je activiteit wordt nagebootst wanneer je de oriëntatie wijzigt, maak je je lay-outs xml-bestanden voor portait en landschap met dezelfde naam en zet die voor portait in de lay-outmap en die voor liggend in lay-out-landmap . Dan kan je het doen

protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.xml_with_same_name_for_landscape_and_portait);
}

Als je je activiteit niet wilt verpesten en opnieuw wilt maken telkens wanneer de richting verandert, lijkt het erop dat het goed gaat met je, maar de Activiteitendocument zegt:

Als een configuratiewijziging betrekking heeft op een wijziging die u niet verwerkt, wordt de activiteit nog steeds opnieuw gestart en wordt onConfigurationChanged (configuratie) niet aangeroepen.

Dus perhpas is je probleem onConfigurationChanged() wordt nooit gebeld. In dit geval chek yout android: config Verandert attribuut in het manifest.

1
toegevoegd