AndroidのwindowSoftInputModeプロパティの詳細

5953 ワード

前の記事では、ソフトキーボードが自動的にポップアップされないようにするには、android:windowSoftInputModeプロパティを設定する方法を簡単に紹介しました.では、この属性はいったい何をしているのか、彼はどんな役割を果たしているのだろうか.今日のこの文章は、android:windowSoftInputMode属性の役割を探求しています.
まず,この属性の名前から,ウィンドウソフトキーボードのインタラクティブモードを設定するための役割を直感的に見ることができる.
Android:windowSoftInputModeプロパティは、次の9つの値を取得します.
    stateUnspecified,stateUnchanged,stateHidden,stateAlwaysHidden,stateVisible,stateAlwaysVisible,adjustUnspecified,adjustResize,adjustPan.
私たちが属性を設定するときは、この9つの値の中から1つを選択したり、「state...|adjust」の形式で設定したりすることができます.では、これらの値はどのようにしてソフトキーボードとウィンドウの相互作用に影響しますか?次に、この9つの値が、ソフトキーボードの表示にどのように影響するかをテストします.
    1.stateUnspecified
ステータスが指定されていない場合、android:windowSoftInputModeプロパティを設定していない場合、ソフトウェアのデフォルトではこのようなインタラクション方式が採用されています.システムはインタフェースに応じて対応するソフトキーボードの表示モードを採用します.例えば、インタフェースにテキストとボタンしかない場合、ソフトキーボードは自動的にポップアップしません.入力する必要がないからです.では、インタフェースにフォーカスを取得した入力ボックスが表示されると、ソフトキーボードが自動的にポップアップされるのではないでしょうか.これは本当にそうとは限らない.たとえば、次のインタフェースレイアウトでは、ソフトキーボードが自動的にポップアップされません.
すなわち、デフォルトでは、このインタフェースの場合、ユーザがソフトキーボードを必要とするかどうかは判断されないため、自動的にポップアップされません.しかし、なぜ必ずしもそうではないのでしょうか.これは、もし私たちがこのレイアウトの外にいたら、小包を1つ包んだからです.
ScrollView、ソフトキーボードが自動的に弾けます!
以下のように、このレイアウトファイルでは、ソフトキーボードが自動的にポップアップされます.
 
   
      xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
 
            android:layout_width="match_parent"
        android:layout_height="match_parent" >
 
                    android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >
 
           

   

 


これは確かに奇妙な判断だ.したがって,属性をstateUnspecifiedに設定すると,システムはデフォルトではソフトキーボードをポップアップしないが,フォーカスを得る入力ボックスのインタフェースがスクロールする必要がある場合,自動的にソフトキーボードをポップアップすると結論した.なぜフォーカスを取得する入力ボックスを強調しなければならないのかというと、入力ボックスでフォーカスを取得しなければ、ソフトキーボードも自動的にポップアップされず、インタフェースが自動的にソフトキーボードをポップアップしないソリューションの一つは、xmlファイルで非入力ボックスコントロールを設定してフォーカスを取得し、キーボードのポップアップを阻止することです.
    2.stateUnchanged
中国語の意味は状態が変わらないという意味ですが、私たちはどのようにこの言葉を理解すればいいのでしょうか.実はよく理解しています.つまり、現在のインタフェースのソフトキーボード状態は、前のインタフェースのソフトキーボード状態に依存します.例えば、現在のインタフェースキーボードが非表示であれば、ジャンプ後のインタフェース、ソフトキーボードも非表示になります.現在のインタフェースが表示されている場合は、ジャンプ後のインタフェースでもソフトキーボードが表示されます.
    3.stateHidden
名前の通り、このプロパティを設定すると、キーボードのステータスは非表示になります.前のインタフェースのステータスにかかわらず、現在のインタフェースに入力する必要があるかどうかにかかわらず、どうせ表示されません.したがって、このプロパティを設定して、ソフトキーボードの自動イジェクトを制御できます.
    4.stateAlwaysHidden
この属性はソフトキーボードにも隠すことができますが、stateHidden属性との違いはまだ分かりません.stackOverFlowで聞いてみたかったのですが、Great Wall、ほほほ...病気が早く方校長に勝つことを祈る
    5.stateVisible
この属性に設定すると、ソフトキーボードを呼び出すことができ、インタフェースに入力ボックスがない場合でも強制呼び出すことができます.
    6.stateAlwaysVisible
この属性もキーボードを呼び出すことができますが、stateVisible属性とは少し違います.例を挙げると、stateVisibleプロパティに設定し、現在のインタフェースキーボードが表示されている場合、ボタンをクリックして次のインタフェースにジャンプすると、入力ボックスがフォーカスを失ってソフトキーボードが隠され、再び現在のインタフェースに戻るとキーディスクが隠されます.しかし、stateAlwaysVisibleに設定すると、次のインタフェースにジャンプします.ソフトキーボードは非表示ですが、再び戻ってくると、ソフトキーボードが表示されます.したがって、このAlwaysは、現在のインタフェース(通常のジャンプまたは前のインタフェースがユーザーによって返される)に到達しても、ソフトキーボードが表示されるという違いを説明しています.
ここまで言うと、上のstateHiddenとstateAlwaysHiddenを連想しますが、違いもそうだと思います.つまり、stateAlwaysHiddenはどうしても隠れていますが、次のインタフェースにジャンプしたときにソフトキーボードが呼び出されたら、今のインタフェースがユーザーに返されたときにキーボードは隠されないはずですが、次のインタフェースにジャンプして、現在のインタフェースのソフトキーボードを消さない方法はまだ見つかっていないので、しばらく検証できません.
    7.adjustUnspecified
このプロパティから、ソフトキーボードの表示と非表示モードを設定するのではなく、ソフトキーボードとソフトウェアの表示内容の表示関係を設定します.この値を設定していない場合、このオプションもデフォルトの設定モードです.この場合、インタフェースに応じて異なるモードが選択されます.画面にスクロール可能なコントロール、例えばScrowViewがあれば、スクロール可能な画面のサイズを小さくし、ソフトキーボードが表示されてもすべての内容が表示されることを保証します.レイアウトにスクロールするコントロールがない場合は、ソフトキーボードがいくつかの内容を覆っている可能性があります.次の図から違いがわかります.
スクロールコントロールがなく、ソフトキーボードの下のレイアウトがブロックされています.変更するには、ソフトキーボードを非表示にして選択するしかありません.また、上のレイアウトに重点を置いて、私たちが選択した入力ボックスが下がると、上のタイトルバーとレイアウトがソフトキーボードに突き上げられます.この特徴を覚えておいてください.後ろに属性があるので、これの効果とは違います.
レイアウトにはスライドコントロールがあり、インタフェース全体のサイズを自動的に縮小するので、ソフトキーボードの上の小さな領域にすべての入力ボックスを表示することができます.
 
これが2つの表示モードの違いです.
    8.adjustResize
このプロパティは、Activityのメインウィンドウが常にサイズ変更され、ソフトキーボードの表示スペースが保証されることを示します.
まず表示効果を見てみましょう.
注意この上のタイトルバーやボタンを見てadjustResize属性に設定すると、スライドコントロールのないレイアウトについては、すべての入力ボックスを選択することはできませんが、ウィンドウの表示方式が変化し、デフォルト属性の場合、レイアウト全体が上位になりますが、adjustResize属性に設定すると、レイアウトの位置はあまり変化しません.これが最大の違いです.
スライドコントロールのあるレイアウトでは、表示効果はデフォルトと同じです.
    9.adjustPan
この属性に設定すると、Activityの画面サイズはソフトキーボードのスペースを保証するために調整されるのではなく、レイアウトの移動によって、ユーザーが入力する入力ボックスがユーザーの失業範囲内にあることを保証し、ユーザーが自分の入力内容を見ることができるようにする別の戦略が取られます.スクロールコントロールのないレイアウトでは、これはデフォルトの設定です.選択した位置が下になると、上のタイトルバーと一部のコントロールが上に上がります.しかし、スクロールコントロールのあるレイアウトでは、あまり違います.次の効果図を見てみましょう.
まず、これはソフトキーボードがポップアップしていない場合、スクロールコントロールの表示範囲があり、一番下に表示されているのは9です.
5という入力ボックスをクリックすると、次の現象が見つかります.
一番上にはボタンしか表示されず、タイトルバーはもう見えません.
一番下も8までしかスライドできず、下の内容もスライドできません.
したがって,この属性の役割を理解することができる.
以上の実験により,「adjust...」を設定しなければのプロパティは、スクロールコントロールのないレイアウトではadjustPan方式を採用し、スクロールコントロールのあるレイアウトではadjustResize方式を採用します.
上記の知識を理解したら、自分のニーズに応じて異なる方法を設定することができます.また,インタフェースをロードする際にソフトキーボードを表示しない方法についてもよく認識されている.
元のアドレス:http://www.jb51.net/article/56043.htm