解决方法FloatingActionButton在TextField或TextArea处于非活动状态时处于非活动状态

解决方法FloatingActionButton在TextField或TextArea处于非活动状态时处于非活动状态

问题描述:

由于FloatingActionButton is inactive above a TextArea or TextField whilst editing我试图通过将TextField和FloatingActionButton放入作为TextField样式的Container来解决此问题。但是,这勾画出一个非常奇怪的方式 - 参见下面的示例中的第二文本字段:解决方法FloatingActionButton在TextField或TextArea处于非活动状态时处于非活动状态

public class FormSeveralInputFields extends Form { 
    public FormSeveralInputFields() { 
     super("FormSeveralInputFields", new BoxLayout(BoxLayout.Y_AXIS)); 
     setScrollableX(false); 
     setScrollableY(true); 
     Container containerFields = new Container(new GridBagLayout()); 
     Style styleContainerFields = containerFields.getAllStyles(); 
     styleContainerFields.setPadding(1, 1, 1, 1); 
     styleContainerFields.setPaddingUnit(
       Style.UNIT_TYPE_SCREEN_PERCENTAGE, 
       Style.UNIT_TYPE_SCREEN_PERCENTAGE, 
       Style.UNIT_TYPE_SCREEN_PERCENTAGE, 
       Style.UNIT_TYPE_SCREEN_PERCENTAGE); 
     getContentPane().add(containerFields); 
     int x = 0, y = 0; 
     { 
      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.gridx = x; 
      gbc.gridy = y; 
      containerFields.add(gbc, new Label("TextField1")); 
     } 
     { 
      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.gridx = ++x; 
      gbc.gridy = y; 
      TextField textField = new TextField(10); 
      Log.p(textField.getStyle().getBorder().getClass().getSimpleName()); 
      FloatingActionButton.setIconDefaultSize(2.0f); 
      FloatingActionButton floatingActionButton = FloatingActionButton.createFAB(FontImage.MATERIAL_CLEAR); 
      Container container = floatingActionButton.bindFabToContainer(textField, Component.RIGHT, Component.CENTER); 
      floatingActionButton.addActionListener((aActionEvent) -> textField.setText("")); 
      containerFields.add(gbc, container); 
     } 
     x = 0; 
     y++; 
     { 
      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.gridx = x; 
      gbc.gridy = y; 
      containerFields.add(gbc, new Label("TextField1")); 
     } 
     { 
      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.gridx = ++x; 
      gbc.gridy = y; 
      TextField textField = new TextField(10); 
      FloatingActionButton.setIconDefaultSize(2.0f); 
      FloatingActionButton floatingActionButton = FloatingActionButton.createFAB(FontImage.MATERIAL_CLEAR); 
      floatingActionButton.addActionListener((aActionEvent) -> textField.setText("")); 
      BorderLayout borderLayout = new BorderLayout(); 
      Container container = new Container(borderLayout); 
      container.setUIID(textField.getUIID()); 
      textField.setUIID(""); 
      container.add(BorderLayout.CENTER, textField); 
      container.add(BorderLayout.EAST, floatingActionButton); 
      containerFields.add(gbc, container); 
     } 
    } 
} 

Sample Screenshot

+0

这会影响模拟器和iPhone SE上的显示。顺便说一下:在编辑过程中,Emojis以不同的大小显示。 –

我们最近增加了ClearableTextField提供这种功能只需使用:

TextField tf = ...; 
myContainer.add(ClearableTextField.wrap(tf)); 
+0

好的 - 但TextArea没有解决方案,对不对? –

+0

...它使文本字段“更胖”。我想知道如何避免这种情况。 –

+0

我查看了ClearableTextField#wrap方法的源代码,并注意到调用了TextField#stopEditing和TextField#startEditingAsync。为什么这样做是可取的 - 它似乎没有这些工作,键盘不会反弹呢? –