android 自定义View在弹出的软键盘之上,以及测量软键盘高度和监听软键盘状态

    项目中需要做评论功能,在软键盘弹出后在其上方弹出自定义的view,看下效果:


         原理很简单,软键盘上方就是一个自定义的PopuWindow,在弹出PopuWindow的代码中激活了软键盘,随即PopuWindow就被软键盘顶到了其上方,里面还给PopuWindow加入了显示 和消失的动画,另外实现了对软键盘显示和隐藏状态的监听,以及对其高度的测量,需要做些逻辑处理的话可以直接在里面写相关的代码就ok了,开始上代码。。。。


1.先看下MainActivity.Java中的代码:

[java]  view plain   copy
  1. public class MainActivity extends Activity implements OnClickListener {  
  2.   
  3.     private Button bt;  
  4.     private Button btn_submit;  
  5.     private PopupWindow popupWindow;  
  6.   
  7.     @Override  
  8.     protected void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         setContentView(R.layout.activity_main);  
  11.         bt = (Button) findViewById(R.id.bt);  
  12.         bt.setOnClickListener(this);  
  13.         //注册软键盘的监听  
  14.         SoftKeyBoardListener.setListener(MainActivity.this,  
  15.                 new SoftKeyBoardListener.OnSoftKeyBoardChangeListener() {  
  16.                     @Override  
  17.                     public void keyBoardShow(int height) {  
  18.                         Toast.makeText(MainActivity.this,  
  19.                                 "键盘显示 高度" + height, Toast.LENGTH_SHORT).show();  
  20.                     }  
  21.   
  22.                     @Override  
  23.                     public void keyBoardHide(int height) {  
  24.                         Toast.makeText(MainActivity.this,  
  25.                                 "键盘隐藏 高度" + height, Toast.LENGTH_SHORT).show();  
  26.                         if(popupWindow!=null){  
  27.                             popupWindow.dismiss();  
  28.                         }  
  29.                     }  
  30.                 });  
  31.     }  
  32.   
  33.     /** 
  34.      * show soft input 
  35.      */  
  36.     private void popupInputMethodWindow() {  
  37.         new Thread() {  
  38.             @Override  
  39.             public void run() {  
  40.                 super.run();  
  41.                 InputMethodManager imm = (InputMethodManager) getSystemService(Service.INPUT_METHOD_SERVICE);  
  42.                 imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);  
  43.   
  44.             }  
  45.         }.start();  
  46.         //  
  47.     }  
  48.   
  49.     /** 
  50.      * show comment popupwindow(弹出评论的popupWindow) 
  51.      */  
  52.     private void showPopupCommnet(final int pid, final int type) { // pe表示是评论还是举报1.代表评论。2.代表举报  
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android的Fragment中,可以通过以下步骤设置弹出软键盘时其他控件高度位置不变: 1. 在Fragment的布局文件中,使用ScrollView或NestedScrollView作为根布局,将所有的控件放在其中。 2. 在需要自动弹出软键盘的EditText控件上添加android:focusable="true"和android:focusableInTouchMode="true"属性。 3. 在Fragment的onCreateView()方法中获取该EditText控件的引用,并为其设置OnFocusChangeListener监听器。 4. 在OnFocusChangeListener监听器中,判断当前控件是否获取焦点,如果获取焦点则弹出软键盘,否则隐藏软键盘。同时,通过设置ScrollView或NestedScrollViewandroid:isScrollContainer属性为false,禁止其滚动。 下面是一个示例代码: ``` public class MyFragment extends Fragment { private EditText editText; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_layout, container, false); editText = (EditText) view.findViewById(R.id.edit_text); editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); } else { InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); } } }); return view; } } ``` 在上述代码中,我们首先在布局文件中使用了NestedScrollView作为根布局,并将EditText放在其中。然后在onCreateView()方法中获取EditText的引用,并为其设置OnFocusChangeListener监听器。在监听器中,我们判断当前控件是否获取焦点,如果获取焦点则弹出软键盘,否则隐藏软键盘。由于NestedScrollView默认是可以滚动的,我们需要设置其android:isScrollContainer属性为false,禁止其滚动。这样就可以实现在弹出软键盘时其他控件高度位置不变的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值