修改Delphi 10.1.2 edit控件在android的复制剪切和粘贴样式

须知少年凌云志,曾许人间第一流。这篇文章主要讲述修改Delphi 10.1.2 edit控件在android的复制剪切和粘贴样式相关的知识,希望能为你提供帮助。
Delphi 10.1.2 edit控件在android默认的复制、剪切和粘贴样式太丑,经悟能-DelphiTeacher的提示,用最简单的代码修改后稍有改观。
默认的样式:

修改Delphi 10.1.2 edit控件在android的复制剪切和粘贴样式

文章图片

修改后的样式:
修改Delphi 10.1.2 edit控件在android的复制剪切和粘贴样式

文章图片

【修改Delphi 10.1.2 edit控件在android的复制剪切和粘贴样式】修改FMX.Platform.Android.pas
找到procedure TWindowManager.ShowContextMenu(const ItemsToShow: TContextMenuItems),按下面的红字增加Copy、cut和Paste button的setBackgroundColor属性。
  FCopyButton.setBackgroundColor(TAlphaColors.Yellowgreen); //------增加这行,可以根据自己的喜好修改
  FCutButton.setBackgroundColor(TAlphaColors.Yellowgreen); //------增加这行,可以根据自己的喜好修改
  FPasteButton.setBackgroundColor(TAlphaColors.Yellowgreen); //------增加这行,可以根据自己的喜好修改

procedure TWindowManager.ShowContextMenu(const ItemsToShow: TContextMenuItems);
var
  LA: TTextLayout;
  P: TPoint;
  HasSelection, HasClipboard: Boolean;
  ApproxWidth: Integer;
  ApproxHeight: Integer;
  ClipboardValue: TValue;
  ResID: Integer;
  TextInput: ITextInput;
  VirtualKeyboard: IVirtualKeyboardControl;
  ClipboardSvc: IFMXClipboardService;
begin
  DestroyPasteMenuTimer;
  ApproxWidth := FContextMenuPopupSize.cx;
  ApproxHeight := FContextMenuPopupSize.cy;
  if not FContextMenuVisible and Supports(FFocusedControl, ITextInput, TextInput) and not FSelectionInProgress then
  begin
      FContextMenuVisible := True;
      HasSelection := not TextInput.GetSelection.IsEmpty;
      TPlatformServices.Current.SupportsPlatformService(IFMXClipboardService, ClipboardSvc);
      ClipboardValue := ClipboardSvc.GetClipboard;
      HasClipboard := not ClipboardValue.IsEmpty and not ClipboardValue.ToString.IsEmpty;
      if FContextMenuPopup = nil then
      begin
          FContextMenuLayout := TJLinearLayout.javaClass.init(TAndroidHelper.Activity);
          FContextButtonsLayout := TJLinearLayout.JavaClass.init(TAndroidHelper.Activity);

          LA := TTextLayoutManager.DefaultTextLayout.Create;
          LA.Font.Style := LA.Font.Style + [TFontStyle.fsBold];

          P := Point(0, 0);
          Supports(FFocusedControl, IVirtualKeyboardControl, VirtualKeyboard);

          if HasSelection then
          begin
              //Copy button
              if (TContextMenuItem.Copy in ItemsToShow) and ((VirtualKeyboard = nil) or not VirtualKeyboard.IsPassword) then
              begin
                  ResID := TAndroidHelper.GetResourceID(\'android:string/copy\');
                  if ResID < > 0 then
                      LA.Text := TAndroidHelper.GetResourceString(ResID)
                  else
                      LA.Text := SEditCopy.ToUpper;
                  FCopyButton := TJButton.JavaClass.init(TAndroidHelper.Activity);
                  if ResID < > 0 then
                      FCopyButton.setText(ResID)
                  else
                      FCopyButton.setText(StrToJCharSequence(LA.Text));
                  FCopyButton.setTypeface(TJTypeface.JavaClass.DEFAULT_BOLD);
                  FCopyButton.setBackgroundColor(TAlphaColors.Yellowgreen); //------增加这行,可以根据自己的喜好修改
                  FCopyClickListener := TCopyButtonClickListener.Create;
                  FCopyButton.setOnClickListener(FCopyClickListener);
                  LA.Font.Size := FCopyButton.getTextSize;
                  P.X := P.X + Ceil((LA.TextWidth + 2) * FScale);
                  P.Y := Max(P.Y, Ceil((LA.TextHeight + 2) * FScale));
                  ApproxHeight := P.Y + FCopyButton.getPaddingTop + FCopyButton.getPaddingBottom;
              end;
              //Cut button
              if (TContextMenuItem.Cut in ItemsToShow) and not TextReadOnly and ((VirtualKeyboard = nil) or not VirtualKeyboard.IsPassword) then
              begin
                  ResID := TAndroidHelper.GetResourceID(\'android:string/cut\');
                  if ResID < > 0 then
                      LA.Text := TAndroidHelper.GetResourceString(ResID)
                  else
                      LA.Text := SEditCut.ToUpper;
                  FCutButton := TJButton.JavaClass.init(TAndroidHelper.Activity);
                  if ResID < > 0 then
                      FCutButton.setText(ResID)
                  else
                      FCutButton.setText(StrToJCharSequence(LA.Text));
                  FCutButton.setTypeface(TJTypeface.JavaClass.DEFAULT_BOLD);
                  FCutButton.setBackgroundColor(TAlphaColors.Yellowgreen); //------增加这行,可以根据自己的喜好修改
                  FCutClickListener := TCutButtonClickListener.Create;
                  FCutButton.setOnClickListener(FCutClickListener);
                  LA.Font.Size := FCopyButton.getTextSize;
                  P.X := P.X + Ceil((LA.TextWidth + 2) * FScale);
                  P.Y := Max(P.Y, Ceil((LA.TextHeight + 2) * FScale));
              end;
          end;

          if HasClipboard and (TContextMenuItem.Paste in ItemsToShow) and not TextReadOnly then
          begin
              //Paste button
              ResID := TAndroidHelper.GetResourceID(\'android:string/paste\');
              if ResID < > 0 then
                  LA.Text := TAndroidHelper.GetResourceString(ResID)
              else
                  LA.Text := SEditPaste.ToUpper;
              FPasteButton := TJButton.JavaClass.init(TAndroidHelper.Activity);
              if ResID < > 0 then
                  FPasteButton.setText(ResID)
              else
                  FPasteButton.setText(StrToJCharSequence(LA.Text));
              FPasteButton.setTypeface(TJTypeface.JavaClass.DEFAULT_BOLD);
              FPasteButton.setBackgroundColor(TAlphaColors.Yellowgreen); //------增加这行,可以根据自己的喜好修改
              FPasteClickListener := TPasteButtonClickListener.Create;
              FPasteButton.setOnClickListener(FPasteClickListener);
              LA.Font.Size := FPasteButton.getTextSize;
              P.X := P.X + Ceil((LA.TextWidth + 2) * FScale);
              P.Y := Max(P.Y, Ceil((LA.TextHeight + 2) * FScale));
              if ApproxHeight = 0 then
                  ApproxHeight := P.Y + FPasteButton.getPaddingTop + FPasteButton.getPaddingBottom;
          end;



    推荐阅读