Android軟鍵盤的隱藏顯示研究
阿新 • • 發佈:2018-12-24
- publicclass ResizeLayout extends LinearLayout{
- privatestaticint count = 0;
- public ResizeLayout(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
- @Override
- protectedvoid onSizeChanged(int w, int h, int oldw, int oldh) {
- super.onSizeChanged(w, h, oldw, oldh);
- Log.e("onSizeChanged " + count++, "=>onResize called! w="+w + ",h="+h+",oldw="+oldw+",oldh="+oldh);
- }
- @Override
- protectedvoid onLayout(boolean changed, int l, int t, int r, int b) {
- super.onLayout(changed, l, t, r, b);
- Log.e("onLayout " + count++, "=>OnLayout called! l=" + l + ", t=" + t + ",r=" + r + ",b="+b);
- }
- @Override
- protectedvoid onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- super.onMeasure(widthMeasureSpec, heightMeasureSpec);
- Log.e("onMeasure " + count++, "=>onMeasure called! widthMeasureSpec=" + widthMeasureSpec + ", heightMeasureSpec=" + heightMeasureSpec);
- }
- <com.winuxxan.inputMethodTest.ResizeLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/root_layout"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical"
- >
- <EditText
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- />
- <LinearLayout
- android:id="@+id/bottom_layout"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical"
- android:gravity="bottom">s
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/hello"
- android:background="#77777777"
- />
- </LinearLayout>
- </com.winuxxan.inputMethodTest.ResizeLayout>
- publicclass ResizeLayout extends LinearLayout{
- private OnResizeListener mListener;
- publicinterface OnResizeListener {
- void OnResize(int w, int h, int oldw, int oldh);
- }
- publicvoid setOnResizeListener(OnResizeListener l) {
- mListener = l;
- }
- public ResizeLayout(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
- @Override
- protectedvoid onSizeChanged(int w, int h, int oldw, int oldh) {
- super.onSizeChanged(w, h, oldw, oldh);
- if (mListener != null) {
- mListener.OnResize(w, h, oldw, oldh);
- }
- }
- }
- publicclass InputMethodTestActivity extends Activity {
- privatestaticfinalint BIGGER = 1;
- privatestaticfinalint SMALLER = 2;
- privatestaticfinalint MSG_RESIZE = 1;
- privatestaticfinalint HEIGHT_THREADHOLD = 30;
- class InputHandler extends Handler {
- @Override
- publicvoid handleMessage(Message msg) {
- switch (msg.what) {
- case MSG_RESIZE: {
- if (msg.arg1 == BIGGER) {
- findViewById(R.id.bottom_layout).setVisibility(View.VISIBLE);
- } else {
- findViewById(R.id.bottom_layout).setVisibility(View.GONE);
- }
- }
- break;
- default:
- break;
- }
- super.handleMessage(msg);
- }
- }
- private InputHandler mHandler = new InputHandler();
- /** Called when the activity is first created. */
- @Override
- publicvoid onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- ResizeLayout layout = (ResizeLayout) findViewById(R.id.root_layout);
- layout.setOnResizeListener(new ResizeLayout.OnResizeListener() {
- publicvoid OnResize(int w, int h, int oldw, int oldh) {
- int change = BIGGER;
- if (h < oldh) {
- change = SMALLER;
- }
- Message msg = new Message();
- msg.what = 1;
- msg.arg1 = change;
- mHandler.sendMessage(msg);
- }
- });
- }
- }