編輯:關於Android編程
問題:在編輯框輸入內容時會彈出軟鍵盤,而手機屏幕區域有限往往會遮住輸入界面
解決辦法:
方法一:
在你的activity中的oncreate中setContentView之前寫上這個代碼
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
方法二:
在 項目的AndroidManifest.xml文件中界面對應的裡加入
這樣會讓屏幕整體上移。如果加上的 是android:windowSoftInputMode="adjustPan"這樣鍵盤就會覆蓋屏幕。
關於android:windowSoftInputMode
activity主窗口與軟鍵盤的交互模式,可以用來避免輸入法面板遮擋問題,Android1.5後的一個新特性。
這個屬性能影響兩件事情:
【一】當有焦點產生時,軟鍵盤是隱藏還是顯示
【二】是否減少活動主窗口大小以便騰出空間放軟鍵盤
它的設置必須是下面列表中的一個值,或一個”state…”值加一個”adjust…”值的組合。在任一組設置多個值——多個”state…”values,例如&mdash有未定義的結果。各個值之間用|分開。
在這設置的值(除"stateUnspecified"和"adjustUnspecified"以外)將覆蓋在主題中設置的值
各值的含義:
【A】stateUnspecified:軟鍵盤的狀態並沒有指定,系統將選擇一個合適的狀態或依賴於主題的設置
【B】stateUnchanged:當這個activity出現時,軟鍵盤將一直保持在上一個activity裡的狀態,無論是隱藏還是顯示
【C】stateHidden:用戶選擇activity時,軟鍵盤總是被隱藏
【D】stateAlwaysHidden:當該Activity主窗口獲取焦點時,軟鍵盤也總是被隱藏的
【E】stateVisible:軟鍵盤通常是可見的
【F】stateAlwaysVisible:用戶選擇activity時,軟鍵盤總是顯示的狀態
【G】adjustUnspecified:默認設置,通常由系統自行決定是隱藏還是顯示
【H】adjustResize:該Activity總是調整屏幕的大小以便留出軟鍵盤的空間
【I】adjustPan:當前窗口的內容將自動移動以便當前焦點從不被鍵盤覆蓋和用戶能總是看到輸入內容的部分
方法三:
把頂級的layout替換成ScrollView,或者說在頂級的Layout上面再加一層ScrollView。這樣就會把軟鍵盤和輸入框一起滾動了,軟鍵盤會一直處於底部。
三: 代碼可控性方法
1:主界面布局文件:
可以看出關鍵地方在於LinearLayoutView這個自定義組件
2:自定義自定義LinearLayoutView
該組件可實現根據軟鍵盤的彈出/關閉而隱藏和顯示某些區域,這是問題解決最關鍵部分,主要有兩點:
① 重寫onSizeChanged方法
該方法是View生命周期的方法,當View尺寸發生變化時調用,如豎屏橫屏切換、軟鍵盤彈出。這裡當軟鍵盤彈出造成View尺寸改變,就會調用onSizeChanged方法,在該方法實現代碼的核心思想是根據尺寸變化,當變大(軟鍵盤彈出),將某些區域隱藏以給編輯界面預留出足夠顯示空間;當恢復(軟鍵盤關閉),再將隱藏的區域顯示出來
protectedvoidonSizeChanged(intw,finalinth,intoldw,finalintoldh){ super.onSizeChanged(w,h,oldw,oldh); uiHandler.post(newRunnable(){ publicvoidrun(){ if(oldh-h>SOFTKEYPAD_MIN_HEIGHT){//軟鍵盤關閉 keyBordStateListener.stateChange(KEYBORAD_SHOW);//回調方法顯示部分區域 }else{//軟鍵盤彈出 if(keyBordStateListener!=null){ keyBordStateListener.stateChange(KEYBORAD_HIDE);//回調方法隱藏部分區域 } } } }); }
②提供KeyBordStateListener 接口采用回調機制調用接口的實現方法。
publicinterfaceKeyBordStateListener{publicvoidstateChange(intstate);}//定義接口 privateKeyBordStateListenerkeyBordStateListener; publicvoidsetKeyBordStateListener(KeyBordStateListenerkeyBordStateListener){ this.keyBordStateListener=keyBordStateListener; } LinearLayoutView組件的完整代碼: publicclassLinearLayoutViewextendsLinearLayout{ publicstaticfinalintKEYBORAD_HIDE=0; publicstaticfinalintKEYBORAD_SHOW=1; privatestaticfinalintSOFTKEYPAD_MIN_HEIGHT=50; privateHandleruiHandler=newHandler(); publicLinearLayoutView(Contextcontext){ super(context); } publicLinearLayoutView(Contextcontext,AttributeSetattrs){ super(context,attrs); } @Override protectedvoidonSizeChanged(intw,finalinth,intoldw,finalintoldh){ //TODOAuto-generatedmethodstub super.onSizeChanged(w,h,oldw,oldh); uiHandler.post(newRunnable(){ @Override publicvoidrun(){ if(oldh-h>SOFTKEYPAD_MIN_HEIGHT){ keyBordStateListener.stateChange(KEYBORAD_SHOW); }else{ if(keyBordStateListener!=null){ keyBordStateListener.stateChange(KEYBORAD_HIDE);} } } }); } privateKeyBordStateListenerkeyBordStateListener; publicvoid、setKeyBordStateListener(KeyBordStateListenerkeyBordStateListener){ this.keyBordStateListener=keyBordStateListener; } publicinterfaceKeyBordStateListener{ publicvoidstateChange(intstate); }
3.主界面MainActivity
publicclassMainActivityextendsActivityimplementsKeyBordStateListener{ privateLinearLayoutViewresizeLayout; privateLinearLayoutlogoLayout; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //獲得可根據軟鍵盤的彈出/關閉而隱藏和顯示某些區域的LinearLayoutView組件 resizeLayout=(LinearLayoutView)findViewById(R.id.login_root_layout); //獲得要控制隱藏和顯示的區域 logoLayout=(LinearLayout)findViewById(R.id.login_layout_logo); resizeLayout.setKeyBordStateListener(this);//設置回調方法 } //實現接口中的方法,該方法在resizeLayout的onSizeChanged方法中調用 @Override publicvoidstateChange(intstate){ //TODOAuto-generatedmethodstub switch(state){ caseLinearLayoutView.KEYBORAD_HIDE: logoLayout.setVisibility(View.VISIBLE); break; caseLinearLayoutView.KEYBORAD_SHOW: logoLayout.setVisibility(View.GONE); break; } }
今天給大家帶來的是僅僅使用一個TextView實現一個高仿京東、淘寶、唯品會等各種電商APP的活動倒計時。最近公司一直加班也沒來得及時間去整理,今天難得休息想把這個分享給
想要學好安卓開發,就必須理解安卓軟件的生命周期,明白一個活動的創建、啟動、停止、暫停、重啟和銷毀的過程,知道各個階段會調用什麼函數進行處理不同的情況,這裡我們就來說說A
好的,我們繼續來了解IPC機制,在上篇我們可能就是把理論的知識寫完了,然後現在基本上是可以實戰了。一.Android中的IPC方式 本節我們開始詳細的分析各中跨進程的方
需求:Android 4.4 + okhttp 3.2;非root,在應用層,拿到DNS維度底層數據方案:jni + hook libc.so中DNS關鍵getaddri
Q:Android Native層Binder.transact()函數