【问题标题】:After Animation EditText is focused for typing动画 EditText 专注于打字之后
【发布时间】:2018-07-10 21:37:06
【问题描述】:

我试图在动画展开后让我的 EditText 聚焦。我尝试以编程方式设置焦点并在 Xml 中尝试过。我已经没有可以解决此问题的想法,但必须有人知道

主活动,

public void onSearchExpand(View view){
    w_SearchBarFullScreen.setVisibility(View.VISIBLE);
    SearchBarExpand = AnimationUtils.loadAnimation(MainActivity.this,R.anim.web_search_expand);
    w_SearchBarFullScreen.startAnimation(SearchBarExpand);
    w_Toolbar.startAnimation(FadeOut);
    w_SearchBarFullScreen.setFocusable(true);
}

XML,

<EditText 
android:id="@+id/w_SearchBarFullScreen"
android:layout_width="360dp"
android:layout_height="40dp"
android:layout_marginBottom="8dp"
android:layout_marginTop="8dp"
android:background="@drawable/web_search_bar"
android:imeOptions="actionSearch"
android:inputType="text"
android:maxLines="1"
android:singleLine="true"
android:text="   "
android:elevation="5dp"
android:focusable="true"
xmlns:android="http://schemas.android.com/apk/res/android" />

最终目标是,当动画完成时,SoftKeyBoard 将可见并准备好在其中输入内容。

最终解决了这个问题,

public void onSearchExpand(View view){
    w_SearchBarFullScreen.setVisibility(View.VISIBLE);

   SearchBarExpand = AnimationUtils.loadAnimation(MainActivity.this,R.anim.web_search_expand);
   w_SearchBarFullScreen.startAnimation(SearchBarExpand);
   w_Toolbar.startAnimation(FadeOut);

   if(w_SearchBarFullScreen.getVisibility() == View.VISIBLE){
       w_SearchBarFullScreen.requestFocus();


   }

}

但现在的问题是让键盘显示它获得焦点有什么建议吗?

使用动画侦听器会出现此错误

01-31 13:35:27.411 5950-5950/com.example.mickeyt.onyxbrowser 
E/AndroidRuntime: FATAL EXCEPTION: main

Process: com.example.mickeyt.onyxbrowser, PID: 5950

java.lang.IllegalStateException: Could not execute method for 
android:onClick
                                                                               at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
                                                                               at android.view.View.performClick(View.java:5623)
                                                                               at android.view.View$PerformClick.run(View.java:22433)
                                                                               at android.os.Handler.handleCallback(Handler.java:751)
                                                                               at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                               at android.os.Looper.loop(Looper.java:154)
                                                                               at android.app.ActivityThread.main(ActivityThread.java:6247)
                                                                               at java.lang.reflect.Method.invoke(Native Method)
                                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)
                                                                            Caused by: java.lang.reflect.InvocationTargetException
                                                                               at java.lang.reflect.Method.invoke(Native Method)
                                                                               at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
                                                                               at android.view.View.performClick(View.java:5623) 
                                                                               at android.view.View$PerformClick.run(View.java:22433) 
                                                                               at android.os.Handler.handleCallback(Handler.java:751) 
                                                                               at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                               at android.os.Looper.loop(Looper.java:154) 
                                                                               at android.app.ActivityThread.main(ActivityThread.java:6247) 
                                                                               at java.lang.reflect.Method.invoke(Native Method) 
                                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872) 
                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762) 
                                                                            Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.animation.Animation.setAnimationListener(android.view.animation.Animation$AnimationListener)' on a null object reference
                                                                               at com.example.mickeyt.onyxbrowser.MainActivity.onSearchExpand(MainActivity.java:338)
                                                                               at java.lang.reflect.Method.invoke(Native Method) 
                                                                               at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
                                                                               at android.view.View.performClick(View.java:5623) 
                                                                               at android.view.View$PerformClick.run(View.java:22433) 
                                                                               at android.os.Handler.handleCallback(Handler.java:751) 
                                                                               at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                               at android.os.Looper.loop(Looper.java:154) 
                                                                               at android.app.ActivityThread.main(ActivityThread.java:6247) 
                                                                               at java.lang.reflect.Method.invoke(Native Method) 
                                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872) 
                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762) 

【问题讨论】:

  • 以及为什么不放 w_SearchBarFullScreen.setFocusable(false); ?
  • @EquiWare 查看我的答案,如何在其中显示软键盘盖..
  • 查看新编辑了解为什么 Logcat 与 AnimationListener

标签: java android animation focus focusable


【解决方案1】:

你需要一个监听器,它会在动画结束时触发,所以这样做

FadeOut.setAnimationListener(new AnimationListener() {
    public void onAnimationStart(Animation anim){};
    public void onAnimationRepeat(Animation anim){};
    public void onAnimationEnd(Animation anim)
    {
        // as mentioned by lib4
        w_SearchBarFullScreen.requestFocus();
    };
}); 

因为,目前您正在请求焦点,在动画完成之前

或者你可以尝试通过xml添加它

<EditText  ...>
    <requestFocus/>
</EditText>

【讨论】:

    【解决方案2】:

    你可以试试这个,一个重要的想法是你可以使用 requestFocus() 来获得焦点。

    SearchBarExpand.setAnimationListener(new Animation.AnimationListener() {
                @Override
                public void onAnimationStart(Animation animation) {
    
                }
    
                @Override
                public void onAnimationEnd(Animation animation) {
                   w_SearchBarFullScreen.requestFocus();
                }
    
                @Override
                public void onAnimationRepeat(Animation animation) {
    
                }
            });
    
    SearchBarExpand.start();
    

    如果 EditText 获得焦点但没有显示键盘,那么您应该在 onAnimationEnd() 中尝试以下操作:-

    @Override
    public void onAnimationEnd(Animation animation) {
    
        if(w_SearchBarFullScreen.requestFocus()) {
            getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
        }
    }
    

    【讨论】:

    • Animation Listener 出现错误,我在想它是如何放入的
    • 动画没有开始吗?你打电话给 SearchBarExpand.start(); 吗?
    • 对不起,但我最终弄清楚了检查更新
    • getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);用它来显示键盘
    【解决方案3】:

    使用它对我有用。

     public void onSearchExpand(View view){
        w_SearchBarFullScreen.setVisibility(View.VISIBLE);
    
       w_SearchBarFullScreen.startAnimation(SearchBarExpand);
       w_Toolbar.startAnimation(FadeOut);
    
       if(w_SearchBarFullScreen.getVisibility() == View.VISIBLE){
           w_SearchBarFullScreen.requestFocus();
           w_SearchBarFullScreen.setText("   ");
           InputMethodManager imm = (InputMethodManager)   getSystemService(Context.INPUT_METHOD_SERVICE);
           assert imm != null;
           imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
       }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多