我正在使用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!");
}
可能会发生什么?
答案 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获得焦点时,键盘会显示出来,你可以输入它。