gpt4 book ai didi

Android WebView 焦点问题

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:00:41 24 4
gpt4 key购买 nike

我正在与 WebView 的焦点管理作斗争:WebView 混淆了经典组件的焦点管理。这是一个简单的应用程序,其中只有一个 EditBox 和一个加载 Google 的 WebView!

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:and="http://schemas.android.com/apk/res/android"
xmlns:webtag="http://schemas.android.com/apk/res/com.webtag"
and:orientation="vertical" and:layout_width="fill_parent" and:layout_height="fill_parent">
<LinearLayout and:id="@+id/HorizontalScrollView02"
and:layout_width="fill_parent" and:layout_height="wrap_content">
<EditText and:id="@+id/EditText01"
and:layout_width="wrap_content" and:layout_height="wrap_content"
and:text="@+id/EditText01"/>
</LinearLayout>
<WebView and:id="@+id/uiContent"
and:layout_weight="1"
and:layout_width="fill_parent"
and:layout_height="fill_parent"/>
</LinearLayout>

Java 代码如下:

public class WebtagActivity extends Activity
{
// UI components.
private WebView mContent;
private EditText mUrl;


@Override
public void onCreate (Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mContent = (WebView) findViewById(R.id.uiContent);
mContent.getSettings().setJavaScriptEnabled(true);
mContent.loadUrl("http://www.google.fr/");
}
}

基于这个非常简单的示例,不可能将焦点放在 WebView(即 google 搜索词输入框)上!但是,当添加“mContent.requestFocus();”时在初始化期间,情况会好转。如果我首先单击 WebView,我可以从我的 EditText 切换到我的 WebView ......但是行为很快变得非常“不稳定”,WebView 有时在触摸它时没有获得焦点,有时得到它但停留在 WebView 字段周围的焦点矩形(橙色或绿色,具体取决于您的手机)再次触摸以返回 EditText 组件(我可以在其中写入文本)!

无论如何,我找到的解决方案是添加一个 touchListener 并在单击 WebView 时请求焦点:

mContent.setOnTouchListener(new View.OnTouchListener() { 
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_UP:
if (!v.hasFocus()) {
v.requestFocus();
}
break;
}
return false;
}
});

这解决了几乎所有问题(从经典组件切换到 WebView 并编写文本),除了一个问题:WebView 在字段周围保持 focusRectangle(绿色或橙色),无论它是否具有焦点。在下面的屏幕截图中,我的 EditText 具有焦点并接收文本,但 WebView 看起来仍然具有焦点。我试过 clearFocus 但它没有做任何事情:

See the result

知道如何解决这个问题吗?非常感谢您的帮助!

最佳答案

确保扩展“ViewGroup”的父布局没有属性

android:descendantFocusability = "blocksDescendants" 防止子布局获得焦点

关于Android WebView 焦点问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4293965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com