2013-08-28 3 views
0

J'essaie d'écrire un programme Android en eclipse. L'idée du programme est d'afficher un message dans TextView disant "Le périphérique a été retourné" si le périphérique est tourné exactement à 180 degrés (dans le plan xy, je pense?). J'utilise le capteur de rotation et j'essaie d'écrire mon code dans l'événement onSensorChanged. Actuellement, ce code est supposé changer un TextView quand une rotation est détectée, mais ce n'est pas le cas.Comment modifier TextView lorsque je fais pivoter mon appareil?

Alors mes questions simples sont:

  1. Comment puis-je obtenir le textview changer étant donné toute rotation? Comment puis-je appliquer cela à une rotation de 180 degrés?


package com.example.rotation2; 

import android.hardware.*; 
import android.os.Bundle; 
import android.app.Activity; 
import android.content.Context; 
import android.view.Menu; 
import android.widget.TextView; 


public class MainActivity extends Activity implements SensorEventListener { 

TextView message; 
private SensorManager mSensorManager; 
private Sensor rotation; 
Context context; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    TextView message = ((TextView) findViewById(R.id.message_view)); 


    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
    rotation = mSensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR); 
    if (rotation != null){ 
     // Success! There's a rotation sensor. 
     message.setText(R.string.compatible); 
     } 
    else { 
     // Failure! No rotation sensor. 
     message.setText(R.string.incompatible); 
     } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public void onAccuracyChanged(Sensor sensor, int accuracy) {} 

@Override 
public void onSensorChanged(SensorEvent event) { 
    message.setText(R.string.rotated); 

} 


} 
+0

Essayez ce lien, il peut être la réponse efficace pour vous, http://stackoverflow.com/questions/8997822/android- efficient-screen-rotation-handling –

+0

Merci, mais je ne pense pas que ce soit vraiment mon problème. C'est utile cependant :) –

+1

Vous voulez accomplir une rotation en utilisant des capteurs? – Mohit

Répondre

0

Overide cette méthode dans l'activité:

public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); 
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ 
     Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); 
    } 
    } 

dans le fichier Manifest Android mentionner l'activité sous

android:configChanges="orientation|screenSize". 
+0

J'ai ce code qui marche et bien qu'il ne résout en quelque sorte pas ma première question, elle ne résout pas la seconde, je souhaite afficher une sorte de message lorsque l'écran a été tourné de 180 degrés exactement, ce qui est important parce que je vais incorporer ce code ailleurs, où TL: DR: Je préférerais utiliser le capteur de rotation parce que cela ne semble pas utile dans les cas de rotation de 180 degrés (et en raison de problèmes de latence en tant que tels). mentionné dans un autre commentaire.) –

+0

getWindowManager(). getDefaultDisplay(). getOrientation() à partir de ce que vous obtiendrez l'orientaion ... vérifier la valeur entière avec Surface.ROTAT ION_0, Surface.ROTATION_90, Surface.ROTATION_180, Surface.ROTATION_270 –

0

Essayez ceci:

public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     txtView.setText("Orientation Changed"); 
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ 
     txtView.setText("Orientation Changed"); 
    } 
} 

si vous voulez détecter la visibilité du clavier:

if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) { 
    Toast.makeText(this, "keyboard visible", Toast.LENGTH_SHORT).show(); 
} else if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) { 
    Toast.makeText(this, "keyboard hidden", Toast.LENGTH_SHORT).show(); 
} 
+0

J'ai essayé d'implémenter ce code, Sathya mais malheureusement, il ne met pas à jour le TextView pour une raison quelconque. J'ai essayé de les inclure dans le fichier strings.xml et de les utiliser comme ça mais pas de dés :( –

+0

Merci, mais pour le moment, je n'utiliserai pas ou ne ferai rien avec le clavier –

Questions connexes