Android軟鍵盤和底部面板的無縫切換

2021-10-06 03:32:53 字數 3712 閱讀 6428

開局就是二張圖。先看效果是不是自己想要的,然後再慢慢往下看。第一張圖是預設高度,第二張圖是高度增加之後的變化。可以看到,切換還是蠻順暢的,沒有出現跳閃的情況。         

當屬性為adjustresize的時候,軟鍵盤彈出時會擠壓activity視窗大小,這樣可以保證輸入法不會覆蓋到輸入框;

當屬性為adjustnothing的時候,軟鍵盤彈出時會覆蓋到當前視窗上,視窗大小不變,這種情況輸入法有可能會覆蓋輸入框。

知道解決的關鍵點之後,還需知道軟鍵盤的高度,以及軟鍵盤的隱藏和顯示狀態。這樣就可以對不同的情況進行相應的改變。

先上**獲取軟鍵盤的高度和顯示、隱藏狀態的**。

public class keyboardlayout extends framelayout 

public keyboardlayout(context context, attributeset attrs)

public keyboardlayout(context context, attributeset attrs, int defstyleattr)

private class keyboardonglobalchangelistener implements viewtreeobserver.ongloballayoutlistener

mscreenheight = ((windowmanager) getcontext().getsystemservice(context.window_service))

.getdefaultdisplay().getheight();

return mscreenheight;

}@override

public void ongloballayout()

miskeyboardactive = isactive;

if (mlistener != null) }}

public void setkeyboardlistener(keyboardlayoutlistener listener)

public keyboardlayoutlistener getkeyboardlistener()

public boolean iskeyboardactive()

/*** 獲取輸入法高度

** @return

*/public int getkeyboardheight()

public inte***ce keyboardlayoutlistener

}

這個類是乙個自定義布局類,只是用來監聽軟鍵盤的狀態,使用時直接放到對應activity的布局下即可。不需用給寬高屬性。

主體的邏輯**。

public class conversationactivity extends baseactivity 

private void initdata()

private void initview()

}});

keyboardlayout.setkeyboardlistener(new keyboardlayout.keyboardlayoutlistener()

} else

}});

//觸控空白處進行軟鍵盤和面板的隱藏

rlcontent.setontouchlistener(new view.ontouchlistener()

}return false;

}});

}// 每當輸入框高度發生變化時,去改變面板的高度

private void updatepanelheight()

private runnable mhideemotionpaneltask = new runnable()

};@onclick()

public void onclick(view view)

} else else

}break;

case r.id.conversation_iv_switch:

hidepanelorinput();

break;

default:

break;}}

/*** 顯示底部面板 (如果鍵盤已經出現,此時展示面板不需用動畫,直接展示即可,如果鍵盤未顯示,則增加乙個向上的動畫)

** @param isanimal 是否以動畫形式展現

* @param duration 動畫時長(預設為300ms)

*/private void showpanel(boolean isanimal, long duration)

@override

public void onanimationend(animator animation)

});animator.start();

} else

}/**

* 隱藏底部面板 (如果鍵盤已經出現,此時隱藏面板不需用動畫,直接隱藏即可,如果鍵盤未顯示,則增加乙個向下的動畫)

** @param isanimal 是否以動畫形式展現

* @param duration 動畫時長(預設為300ms)

*/private void hidepanel(boolean isanimal, long duration)

});animator.start();

} else }}

//更改輸入法軟鍵盤彈出方式

public static void updatesoftinputmethod(activity activity, int softinputmode) }}

//隱藏軟鍵盤

protected void hideinput()

//顯示軟鍵盤

protected void showinput()

//屬性動畫是可以直接改變view的寬高的 通過不斷改變view的屬性來產生動畫的效果

public void setanimaupdatelistener(valueanimator valueanimator, final view view)

});}

//隱藏輸入框或底部面板

public void hidepanelorinput()

//如果面板顯示,則進行下降動畫的隱藏

if (llbottompanel.getvisibility() == view.visible)

}@override

public void onbackpressed()

super.onbackpressed();}}

布局**我就不貼了,主要就是activity**。上面我都寫了相應的注釋。這裡面我還增加了底部面板的顯示和隱藏動畫(屬性動畫),這樣不會太生硬。當軟鍵盤隱藏時,顯示面板和隱藏面板都會以動畫形式展現。當軟鍵盤顯示時,則直接顯示和隱藏面板。

還有乙個特別需要注意的地方。需要在清單檔案中對activity設定乙個預設的windowsoftinputmode,不然跳閃的情況就還會出現。

嗯,差不多到這就結束了。有不懂的地方可以加我 qq1902366297

android遮蔽軟鍵盤

android name mainactivity android screenorientation landscape android windowsoftinputmode adjustpan statehidden android configchanges orientation keyb...

Android 軟鍵盤互動

方法很簡單,在edittext中設定兩個屬性 android imeoptions actionsearch android singleline true 這兩個屬性必須一起設定,不然不會生效。在沒有設定imeoptions屬性的情況下,設定了inputtype或者singleline true ...

Android軟鍵盤研究

android軟鍵盤研究 1.利用按鈕彈出軟鍵盤。2.程式啟動後直接彈出軟鍵盤。1.由button的onclick事件調出軟鍵盤和隱藏軟鍵盤。具體 如下 public class test extends activity implements onclicklistener l.addview b...