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:
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:
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:
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:
1 2 3
|
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0); |
Code:
1 2
|
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); |
Avez-vous des suggestions ?