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 :
Au lancement de mon application, je masque le clavier.
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>
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 :
*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
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); } }
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);Avez-vous des suggestions ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
Partager