Java 动画编辑后,文本将被聚焦以进行键入
我正在尝试在动画发生后将我的EditText聚焦以展开它。我尝试通过编程设置焦点,在Xml中也尝试过。我已经没有办法解决这个问题了,但必须有人知道 主要活动Java 动画编辑后,文本将被聚焦以进行键入,java,android,animation,focus,focusable,Java,Android,Animation,Focus,Focusable,我正在尝试在动画发生后将我的EditText聚焦以展开它。我尝试通过编程设置焦点,在Xml中也尝试过。我已经没有办法解决这个问题了,但必须有人知道 主要活动 public void onSearchExpand(View view){ w_SearchBarFullScreen.setVisibility(View.VISIBLE); SearchBarExpand = AnimationUtils.loadAnimation(MainActivity.this,R.anim.w
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
但现在的问题是让键盘显示出焦点,有什么建议吗
由于使用了动画侦听器,我留下了这个错误
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)
您需要一个监听器,它将在动画完成时触发,所以请执行此操作
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>
您可能可以试试这个,一个重要的想法是您可以使用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()中尝试以下操作:-
使用这个对我来说很有用
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);
}
为什么不将w_searchbar全屏显示。setFocusable(false)@EquiWare查看我的答案,如何在其中显示软键盖..查看新编辑了解为什么Logcat与AnimationListener错误与Animation Listener一起出现,我在想我是如何将其放入动画中的?您是否调用了SearchBarExpand.start();?很抱歉,我最终找到了答案,检查UpdateGetWidow().setSoftInputMode(WindowManager.LayoutParams.SOFT\u INPUT\u STATE\u ALWAYS\u VISIBLE);用这个来显示键盘让我们看看。
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();
@Override
public void onAnimationEnd(Animation animation) {
if(w_SearchBarFullScreen.requestFocus()) {
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
}
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);
}