单击Android和iOS时,未突出显示自定义样式的Firemonkey列表框项目

时间:2014-12-11 19:20:46

标签: firemonkey listboxitem

我正在使用Firemonkey构建多平台(iOS,Android,OSX,Windows APP)。我要做的其中一件事是创建一个自定义列表框项(包含更多数据元素),它将适用于所有这些平台: 将使您能够选择项目,正确显示。  根据我的研究,可能最好的方法是为列表框项创建自定义样式并在那里定义数据元素。这就是我做的。 我在此过程中从客户端数据集创建项目:

    procedure TMasterDetailForm.LoadAvailable;
var i: Integer;
    Item: TListBoxItem;
begin
  lstAvailable.Clear;
  //Add Header
  lstAvailable.BeginUpdate;
  Item := TListBoxItem.Create( lstAvailable );
  Item.Parent := lstAvailable;
  Item.Height := 70;
  //Item.OnApplyStyleLookup := ListItemApplyStyleLookupHandler;
  Item.StyleLookup := AvailableListHeaderStyle;

  //Add Details
  cdsAvailable.First;
  for I := 1 to cdsAvailable.RecordCount do
  begin
    Item := TListBoxItem.Create( lstAvailable );
    Item.Parent := lstAvailable;
    Item.Height := 50;
    //Item.Selectable := True;

    //Item.OnApplyStyleLookup := ListItemApplyStyleLookupHandler;
    Item.StyleLookup := AvailableListItemStyle;
    //Item.StyleLookup := 'ListboxItem1Style1';
    Item.StylesData[ txtWoNum ] := cdsAvailable.FieldByName( 'work package' ).AsString;
    Item.StylesData[ txtAircraft ] := cdsAvailable.FieldByName('aircraft').AsString;
    Item.StylesData[ txtTaskDescription ] := cdsAvailable.FieldByName('task').AsString;
    cdsAvailable.Next;
  end;
  lstAvailable.EndUpdate;
end;

除了在Android或iOS上点击(点击)ListBoxItem之外,所有平台都能正确设置样式,但不突出显示ListBoxItem。如果我取消签名样式,那么选择项目也有效。我无法弄清楚如何解决这个问题。 顺便说一句,ListBox上的onclick事件似乎正常工作(itemindex更改)。

任何输入都将不胜感激。

编辑(2014年12月12日):我尝试通过在ListBox编辑器中手动添加项目并在此处丢弃此代码来简化示例,并且我发现用于选择列表框项目的动画会发生变化。所以,我自定义了列表框项目,只将TextColor更改为蓝色。在Android上的运行时,当您选择列表框项时,它只是将文本的颜色更改为黑色而不是绘制整行。任何想法如何使列表框的行为方式类似于没有附加样式的行为?

1 个答案:

答案 0 :(得分:1)

抱歉我的英语不好。

我有一个解决方案(在XE7中测试):

  1. 打开表单
  2. 将IDE样式更改为" iOS"
  3. 选择TListBox并打开上下文菜单,然后选择"编辑默认值 Style":StyleBook2已创建。
  4. 在样式" listboxstyle / background"中添加一个TRectangle组件。 名称"选择"。这太神奇了!
  5. 现在,Firemonkey找到了选择'组件和工作正常!

    如果您在这些步骤之前已经有了StyleBook2组件,则可能需要删除它,请小心!