我有一个活动,里面有一个webView(Chromium webView https://github.com/mogoweb/chromium_webview/)。
屏幕有两个部分,顶部是ViewPager,底部是WebView。加载活动并且webView未处于焦点时,后退键按预期工作,并触发onBackPressed和onKeyDown。
然而,当webView获得焦点时(通过点击或聚焦文本字段),活动似乎没有按预期处理密钥,并且onBackPress和onKeyDown都没有被触发。
我尝试过的事情: - 我试过onBackPress和onKeyDown。 - 尝试设置android:descendantFocusability =" blocksDescendants"对于linearlayout,但webView不再获得焦点。
我相信大部分代码都是标准的java,因为当webView不在焦点时会触发事件,我认为在聚焦webView时我会处理不好的事情。
活动是"片段活动"
非常感谢任何建议。 以下是backpress和keydown的代码,甚至调试消息也不会被看到,也没有错误。
XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/order_mode"
android:descendantFocusability="blocksDescendants">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/frame_surface_view"
>
<io.vov.vitamio.widget.VideoView
android:id="@+id/surface_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="top"
/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/frame_surface_view"
android:layout_alignRight="@+id/frame_surface_view"
android:layout_margin="20dp"
>
<ImageButton
android:id="@+id/btnGift"
android:layout_width="40dp"
android:layout_height="40dp"
android:background="@drawable/gift"
/>
<ImageButton
android:id="@+id/btnPraise"
android:layout_width="40dp"
android:layout_height="40dp"
android:background="@drawable/praise"
android:layout_marginLeft="15dp"
/>
<Spinner
android:id="@+id/spinnerPriaseMessages"
android:layout_width="0dp"
android:layout_height="30dp"
android:textColor="#000000"
android:gravity="center_horizontal|center_vertical"
android:textSize="12sp"
android:layout_below="@+id/indicator"
android:layout_toRightOf="@+id/txtCount"
android:background="@drawable/bg_input"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:entries="@array/praise_count_array"
android:prompt="@string/selectPraise"
android:spinnerMode="dialog" />
</LinearLayout>
</RelativeLayout>
<RelativeLayout
android:id="@+id/webViewRelative"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.mogoweb.chrome.WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true" />
</RelativeLayout>
<io.vov.vitamio.widget.CenterLayout
android:layout_width="match_parent"
android:layout_height="match_parent" >
</io.vov.vitamio.widget.CenterLayout>
</LinearLayout>
事件
@Override
public void onBackPressed(){
System.out.println("Back Pressed");
if(webView.isFocused()){
super.onBackPressed();
finish();
}
System.out.println("BackPressed");
if(!giftShown){
mVideoView.stopPlayback();
finish();
}else{
System.out.println("Hiding Fragment Gift");
getSupportFragmentManager().popBackStack();
giftShown=false;
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
System.out.println("onKeyDown");
if ((keyCode == KeyEvent.KEYCODE_BACK) ) {
if(webView.isFocused()){
super.onBackPressed();
finish();
}
System.out.println("BackPressed");
if(!giftShown){
mVideoView.stopPlayback();
finish();
}else{
System.out.println("Hiding Fragment Gift");
getSupportFragmentManager().popBackStack();
giftShown=false;
}
}
return super.onKeyDown(keyCode, event);
}
答案 0 :(得分:0)
我尝试这种方式来解决这个问题,在onCreateView片段上添加此代码:
webView.setOnKeyListener(new OnKeyListener(){
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
webView.clearFocus();
return true;
}
return false;
}
});
或者在fragmentActivity上尝试这种方式:
if (webView.isFocused() && webView.canGoBack()) {
super.onBackPressed();
}