应用一,表格所有行的颜色保持一致:

默认表格是区分奇偶行颜色的,

因为Grid.SelfOwnMaterial.IsDiffOddAndEvent默认是为True的,

效果如下:

如果要将所有行的颜色统一用白色的,

就需要将Grid.SelfOwnMaterial.RowBackColorMaterial.IsDiffOddAndEven设置为False,

背景色就没有了,这时候,

行的背景色由Grid.SelfOwnMaterial.RowBackColorMaterial.BackColor控制,

把它的IsFill设置为True,FillColor设置为White,

效果如下图所示:

这样,表格行的背景色就统计了

应用二,在运行时自定义行的颜色:

在OnPrepareDrawItem事件中,

根据Item来指定Grid.SelfOwnMaterial.RowBackColorMaterial.BackColor,

比如我们要把”李四”那一行的背景色设置为红色,代码如下:

procedure TFrameItemGrid_CustomRowColor.SkinFMXItemGrid1PrepareDrawItem(

Sender: TObject; ACanvas: TDrawCanvas; AItem: TBaseSkinItem;

AItemDrawRect: TRect);

begin

if TSkinItem(AItem).Caption=’李四’ then

begin

Self.SkinFMXItemGrid1.Material.RowBackColor:=TAlphaColorRec.Red;

end

else

begin

Self.SkinFMXItemGrid1.Material.RowBackColor:=TAlphaColorRec.White;

end;

end;

效果如下:

应用三,设置行选中的背景颜色:

行的背景颜色在Grid.SelfOwnMaterial.RowBackColorMaterial.BackColor,那么选中的颜色是在它的PushedEffect中,我们将选中的颜色设置为灰色:

先在设计时先”王一”那一行设置为选中,Item.Selected设置为True,

将Grid.SelfOwnMaterial.RowBackColorMaterial.BackColor.PushedEffect.FillColor设置为Gray,将BackColor.PushedEffect.EffectTypes中勾选drpetFillColorChange,表示选中的时候要改背景色变为灰色,

示例一,区分奇偶行的背景色

默认是区分厅偶行的背景色的,

Grid.SelfOwnMaterial.RowBackColorMaterial.IsDiffOddAndEven为True,

效果如下:

示例二,更改奇偶行的背景色

奇行背景色在Grid.SelfOwnMaterial.RowBackColorMaterial.OddRowBackColor中设置,

偶行背景色在Grid.SelfOwnMaterial.RowBackColorMaterial.EvenRowBackColor中设置,

我们把奇行背景色设置为绿色,偶行背景色设置为红色,

效果如下:

示例一,表格的行分隔线

默认是区分偶行的背景色的,所以没有加分隔线

先把区分奇偶行的背景色去掉,

Grid.SelfOwnMaterial.RowBackColorMaterial.IsDiffOddAndEven设置为False,

表格的分隔线在Grid.SelfOwnMaterial.DrawGridCellDevideMatrial中设置的,

IsDrawRowLine控制行分隔线是否显示,

DrawRowLineParam控制行分隔线的颜色,

IsDrawRowBeginLine用于控制行开始分隔线的显示

IsDrawRowEndLine用于控制行结束分隔线的显示

都设置为True,效果如下:

示例二,表格的列分隔线

表格的分隔线在Grid.SelfOwnMaterial.DrawGridCellDevideMatrial中设置的,

IsDrawColLine用于设置表格的列分隔线,

效果如下:

IsDrawColBeginLine用于控制列开始分隔线的显示

IsDrawColEndLine用于控制列结束分隔线的显示

效果如下:

中文:在很多时候会需要自定义Delphi的fmx.jar

比如在对接一些三方SDK的时候要和底层的FMXNativeActivity打交道,

或者发现了fmx.jar中的错误,又或者想要增加点功能。

下面我以10.3.3为例介绍一下如何操作

  1. Delphi提供了fmx.jar的所有源码,

在C:\Program Files (x86)\Embarcadero\Studio\20.0\source\rtl\androiddex\java\fmx这个目录中

一看到这些文件,玩过一点Android的同学可能已经知道了,这个目录其实是一个Eclipse的工程,

对,我们要用到Eclipse,因为我经常要用到封装jar,所以装了的,

我们打开它:

将fmx这个工程导入到eclipse中,步骤如下:

先在左边的工程管理视图中右键->Import,

点击Browse,选择工程根目录,

将fmx的目录路径拷到Root Directory框中,按一下回车

比如:C:\Program Files (x86)\Embarcadero\Studio\20.0\source\rtl\androiddex\java\fmx

中间表格会显示出来搜索到的工程

点击确定,左边的工程管理视图中会显示出来fmx的Android工程

src节点是工程的源码,可以展开来

  1. 好了,接下来我们就来尝试导出jar

我们要导出所有的代码到jar中,所以在src节点中右键->Export

选择”JAR file”

在这里选择你要生成的jar路径和文件名

  1. 第一次导出会报错,一般是因为引用的其他jar没有找到的关系,

它说我们classpath中的很多class files找不到,但其实这些源文件都是存在的,那就有可能是这些源文件所引用的其他包不存在,

我们来检查一下,先右键fmx工程,选择最底下的”Properties”,查看工程属性

在Java Build Path的Libraries中,有很多红色的叉叉,

表示发现该工程所引用的其他jar不存在,

比如android-support-v4.jar不在..\..\libs目录中,

com-google-android-gms.play-services-analytics-impl.16.0.8.jar不在..\libs\gms\目录,

其实这些jar都是delphi中自带的,随便打开一个将Android节点展开来都能看的到位,

它们在C:\Program Files (x86)\Embarcadero\Studio\20.0\Lib\android\debug目录中,

我们要在C:\Program Files (x86)\Embarcadero\Studio\20.0\source\rtl\androiddex下建一个libs目录,将这些jar放进去

再在libs里面建一个gms目录

将谷歌的其他jar放到gms里面

有些重复的包可以删除

处理好后,左边就没有红色的叉叉了

清一下工程

再导一次

导出成功

  1. 然后你就可以在eclipse中修改fmx中的java源码,自己打包成fmx.jar来使用啦!

使用的时候记得先将自带的fmx.jar禁用掉。