IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Gestion du clavier lors d'une rotation


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 21
    Par défaut Gestion du clavier lors d'une rotation
    Bonjour à tous,

    Dans mon application j'ai divisé mon écran en deux partie :
    -- la partie supérieure à la moitié de mon écran ("partie statique de mon IHM"), contient une icone, images, boutons et EDITTEXT
    -- la partie inférieure à la moitié de mon écran("partie dynamique de mon IHM"), affiche soit un ViewPager me permettant de naviguer entre différents fragments ou soit une FrameLayout (layoutMessage)

    main.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#ff0000">
        <ImageView
    		android:id="@+id/IdImgFondEcran"
    		android:src="@drawable/fond_ecran"
    		android:layout_width="wrap_content"
    		android:layout_height="wrap_content"
    		android:layout_gravity="center"
    		/>
    	<Button
    		android:id="@+id/IdButonMessage"
    		android:background="@drawable/state_button_message"
    		android:onClick="newMessage"
    		android:layout_width="wrap_content"
    		android:layout_height="wrap_content"
    		android:layout_marginTop="25px"
    		android:layout_marginLeft="4px"
    		/>
            <EditText
    		android:id="@+id/IdEditTex"
    		android:layout_marginTop="12px"
    		android:layout_marginLeft="220px"
    		android:layout_width="838px"
    		android:layout_height="156px"
    		android:textColor="#000"
    		android:textSize="30px" 
    		android:textStyle="bold"
    		/>
    	<ImageView
    		android:id="@+id/IdIconBatteryLevel"
    		android:src="@drawable/icon_battery"
    		android:layout_width="wrap_content"
    		android:layout_height="wrap_content"
    		android:layout_marginTop="34px"
    		android:layout_marginLeft="1179px"
    		/>
             <FrameLayout android:id="@+id/IdLayoutMain" 
        	        android:layout_width="wrap_content"
        	        android:layout_height="wrap_content"
        	        android:layout_marginTop="250px">
      			<android.support.v4.view.ViewPager
      			android:id="@+android:id/viewpager"
      			android:layout_width="wrap_content"
     			android:layout_height="wrap_content"
      			/>
      	</FrameLayout>
            <FrameLayout android:id="@+id/IdLayoutMessage" 
        	        android:layout_width="wrap_content"
        	        android:layout_height="wrap_content"
        	        android:layout_marginTop="250px">
        	        <include android:id="@+id/erase" layout="@layout/fenetre_erase"/>
      	</FrameLayout>
    </FrameLayout>
    Au lancement de mon application, je masque le clavier.
    Quand je clic sur un boutton (IdButonMessage) de ma partie supérieure, je n'affiche ni le viewpager, ni la FrameLayout (layoutMessage). Il me reste que la partie statique (fond d'écran, icone, boutton (IdButonMessage) et EDITTEXT. Et j'affiche le clavier...

    Jusqu'ici tout va bien...
    Jusqu'ici tout va bien...

    Mais lorsque que la tablette passe du mode paysage au mode portrait, le clavier disparait. Ce que je ne souhaite pas !!! Comment peut on faire pour forcer ou garder l'affichage du clavier lors d'une rotation de l'écran ?

    De plus, mon bouttonMessage, lors du changement d'orientation, passe dans l'état pressed ou focused (il s'affiche en rouge), ce que je ne veux pas ! Mais lorsque je clic sur l'écran, il s'affiche normalement (en bleu)...

    fichier state_button_message.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?xml version="1.0" encoding="UTF-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_window_focused="false" android:state_enabled="true" android:drawable="@drawable/button_message_blue" />
        <item android:state_pressed="true" android:drawable="@drawable/button_message_red" />
        <item android:state_focused="true" android:drawable="@drawable/button_message_red" />
        <item android:state_enabled="true" android:drawable="@drawable/button_message_blue" />
    </selector>

    voici le code ViewPagerFragmentActivity :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    public class ViewPagerFragmentActivity extends FragmentActivity{
     
    	private static FrameLayout Layout1 ;
            private static FrameLayout Layout2 ;
     
            private static Parcelable stateViewFragment;
            private static ViewPager pager;
            private PagerAdapter mPagerAdapter;
     
            @Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		super.setContentView(R.layout.main);
     
                    Layout1 = (FrameLayout)findViewById(R.id.IdLayoutMain);
                    Layout2 = (FrameLayout)findViewById(R.id.IdLayoutMessage);
     
                    Layout1.setVisibility(View.VISIBLE);
                    Layout2.setVisibility(View.GONE);
    
                    //masque le clavier et désactive l'EditText
                    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    		myEditText = (EditText)findViewById(R.id.IdEditTex);
                    myEditText.setEnabled(false);
    
                    //initialise the pager
    		this.initialisePaging();
    }
     
             private void initialisePaging() {
     
    		List<Fragment> fragments = new Vector<Fragment>();
    		fragments.add(Fragment.instantiate(this, Fragment1.class.getName()));
    		fragments.add(Fragment.instantiate(this, Fragment2.class.getName()));
    		this.mPagerAdapter  = new PagerAdapter(super.getSupportFragmentManager(), fragments);
    		//
    		pager = (ViewPager)super.findViewById(R.id.viewpager);
    		pager.setAdapter(this.mPagerAdapter);
    	}
     
            @Override
    	public void onSaveInstanceState(Bundle outState)
    	{
    		outState.putInt("lay1_int", Layout1.getVisibility());
    		outState.putInt("lay2_int", Layout2.getVisibility());
                    stateViewFragment = pager.onSaveInstanceState();
                    outState.putString("valueEditText", myEditText.getText().toString());
    
            }
    
            @Override
    	public void onRestoreInstanceState(Bundle savedInstanceState)
    	{
                    myEditText.setText(savedInstanceState.getString("valueEditText");
    		
                    if(savedInstanceState.getInt("lay1_int") == 0)
    		{
                         Layout1.setVisibility(View.VISIBLE);
    		     Layout2.setVisibility(View.GONE);
                         pager.onRestoreInstanceState(stateViewFragment);
                    }
                     else if(savedInstanceState.getInt("lay2_int") == 0)
    		{
    			//affichage du layoutMessage 		
    			Layout1.setVisibility(View.GONE);
    			Layout2.setVisibility(View.VISIBLE);
                    }
                    else
                    {
                         // pas d'affichage du viewpager et du layoutMessage
                         // il reste la partie statique de mon IHM, fond ecran, boutton
                         // message, icone et EDITTEXT 
                         Layout1.setVisibility(View.GONE);
    		     Layout2.setVisibility(View.GONE);
    
                         //affichage du clavier !!!
                         //essais de plusieurs méthodes cf*
                        
                    }
               }
    
                public void  newMessage(View v)
                {
        	  	// pas d'affichage du viewpager et du layoutMessage
                    // il reste la partie statique de mon IHM, fond ecran, boutton
                    // message, icone et EDITTEXT avec affichage du clavier
        	       Layout1.setVisibility(View.GONE);
                   Layout2.setVisibility(View.GONE);
    
                   myEditText.setEnabled(true);
                   myEditText.setCursorVisible(true);
                   myEditText.setClickable(true);
            
            
                   InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                   imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
                   
                }
    }
    *méthodes d'affichage du clavier mais qui ne fonctionne pas (dans onRestoreInstanceState)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
    Avez-vous des suggestions ?

  2. #2
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Par défaut
    Bonjour

    J'ai un problème similaire sur l'affichage du clavier.
    As tu trouvé une solution ?

Discussions similaires

  1. disparition de l'affichage lors d'une rotation ou zoom
    Par 3aychoucha dans le forum OpenGL
    Réponses: 2
    Dernier message: 16/02/2012, 12h40
  2. Coupage d'image lors d'une rotation
    Par roulian46 dans le forum Graphisme
    Réponses: 1
    Dernier message: 19/07/2011, 13h28
  3. Pixelisation d'image lors d'une rotation
    Par univscien dans le forum 2D
    Réponses: 19
    Dernier message: 08/11/2009, 16h08
  4. Réponses: 4
    Dernier message: 23/02/2009, 16h42
  5. Réponses: 3
    Dernier message: 16/01/2009, 14h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo