JavaFXPorts Kokos Project没有显示Android键盘

时间:2017-11-30 17:50:20

标签: android javafx javafxports

我正在使用JavaFX和Android修改kokos项目,使用jfxmobile插件,当我添加文本字段时,屏幕键盘不会出现,我无法修改文本。

mytextfield是JavaFX的TextField类的对象:

@FXML 
public void initialize(){ 
    counter = 0; 
    mytextfield.setStyle( "-fx-background-color:#FFFF00; -fx-skin: \"com.sun.javafx.scene.control.skin.TextFieldSkinAndroid\"; ");
    mytextfield.requestFocus(); 
} 

public void onButtonClick(){ 
    counter++; 
    clickLabel.setText("You've clicked this button " + counter + " times!"); 
}

可能会发生什么?

1 个答案:

答案 0 :(得分:1)

我测试了Kokos项目,修改了JavaFX application类以包含JavaFX TextField

@Override
public void start (Stage stage) throws Exception {
    final Button b = new Button("Click JavaFX");
    b.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent actionEvent) {
            b.setText("Clicked");
        }
    });
    Screen primaryScreen = Screen.getPrimary();
    Rectangle2D visualBounds = primaryScreen.getVisualBounds();
    double width = visualBounds.getWidth();
    double height = visualBounds.getHeight();

    VBox box = new VBox(10, b, new TextField());
    box.setAlignment(Pos.CENTER);
    Scene s = new Scene(box, width, height);
    stage.setScene(s);
    stage.show();
}

我可以重现这个问题:软键盘无法显示。

对于初学者,您不需要为TextField设置-fx-skin属性,它将在内部应用。

如果您使用adb logcat或AndroidStudio检查日志,您会注意到当textField获得焦点时会调用显示键盘,而当它丢失时会显示另一个隐藏它:< / p>

V/FXEntity: Called notify_showIME
V/FXEntity: Done calling notify_showIME
...
V/FXEntity: Called notify_hideIME
V/FXEntity: Done Calling notify_hideIME

这意味着JavaFX TextField实际上会执行正确的调用以显示和隐藏键盘,但是有些事情失败了。

经过一些调试后,我注意到activity_main.xml正在使用它来进行片段定义:

android:name="android.webkit.WebViewFragment"

对应于用于显示WebView的内置片段。

这不是我们需要的,所以我创建了一个片段:

public class MyFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fx_fragment, container, false);
        return view;
    }
}

基于现有fx_fragment.xml,并相应修改activity_main.xml

<fragment
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:name="javafxports.org.kokos.MyFragment"
    android:id="@+id/fragment"
    android:layout_gravity="left|top"
    tools:layout="@layout/fx_fragment" />

就是这样,现在当你运行应用程序并且textField获得焦点时,键盘会显示出来,你可以输入它。