在Android中更改按钮的字体大小,同时保持原生



我想改变一个按钮的字体大小。我使用了这里的解决方案

import QtQuick 2.2
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2
Rectangle {
  id: container
  width: 800
  height: 800
  Button {
    id: cmdQuit
    text: qsTr("Quit")
    width: 100
    height: 100
    style: ButtonStyle {
      label: Text {
        renderType: Text.NativeRendering
        verticalAlignment: Text.AlignVCenter
        horizontalAlignment: Text.AlignHCenter
        font.pointSize: 20
        text: cmdQuit.text
      }
    }
  }
}

不幸的是,当我这样做的时候,我失去了Android原生的外观,得到了一个后备的基础外观。有没有办法改变字体大小而不失去Android上的本地风格?

我想改变单个按钮的外观,并希望其他按钮保持不变。我使用Qt5 (c++)与QML。我不想要一个包含复制整个QtQuick/Controls/Styles/Android文件夹的解决方案-我可以自己做,但这很糟糕

警告:此解决方案依赖于修改内部对象,不保证在不同的Qt版本或平台上工作

如果你绝对只想修改一个未公开对象的属性,你仍然可以通过Item(或resources/data)的children属性来访问它。

Component.omCompleted上调用一个方便的函数,它可以转储Item的层次结构,下面是一个示例实现:

function dumpHierarchy(item, level) {
    level = level | 0;
    for (var index = 0; index < item.children.length; ++index) {
        var child = item.children[index];
        print(Array(level*2 + 1).join(" ")+ index +": "+child);
        dumpHierarchy(child, level+1);
    }
}

和它在Android和Qt 5.5上的输出Button:

0: QQuickLoader(0xab87c768)
  0: QQuickLoader_QML_44(0xab7a84f0)
  1: QQuickItem_QML_53(0xab8c8d60)
    0: DrawableLoader_QMLTYPE_51(0xab8bb088)
      0: StateDrawable_QMLTYPE_65(0xab949420)
        0: DrawableLoader_QMLTYPE_51(0xab936ea0)
          0: NinePatchDrawable_QMLTYPE_67(0xab955c90)
            0: QQuickAndroid9Patch_QML_68(0xab913608)
        1: QQuickLoader_QML_66(0xab924838)
    1: QQuickRowLayout(0xab8b03a0)
      0: QQuickImage(0xab8b0960)
      1: LabelStyle_QMLTYPE_50(0xab8c1758)
1: QQuickMouseArea_QML_46(0xab887028)

在这里我们可以看到LabelStyle的层次结构位置,这是我们感兴趣的。如果你想快速地完成它,你可以把它添加到你的Button元素中:

Component.onCompleted: children[0].children[1].children[1].children[1].font.pixelSize = 50

,但这不是真正可维护的,一个更可接受的解决方案是遍历Button的子层次结构,找到要修改的字体。

我已经把一个函数findFont在一个工作示例应用程序:

import QtQuick 2.5
import QtQuick.Controls 1.4
ApplicationWindow {
    id: app
    visible: true
    width: 640
    height: 480
    function findFont(object) {
        if (object.font)
            return object.font;
        var font = null;
        for (var index = 0; index < object.children.length && !font; ++index)
            font = findFont(object.children[index]);
        return font;
    }
    Column {
        anchors.centerIn: parent
        Button {
            anchors.horizontalCenter: parent.horizontalCenter
            text: "Button 1"
            width: 300
            height: 100
        }
        Button {
            anchors.horizontalCenter: parent.horizontalCenter
            text: "Button 2"
            width: 300
            height: 100
            Component.onCompleted: {
                findFont(this).pixelSize = 50;
                // On Android and Qt 5.5, this is equivalent :
                //children[0].children[1].children[1].children[1].font.pixelSize = 50;
            }
        }
    }
}

你试过使用Usefont.pixelSize

或尝试以下

QFont f( "Arial", 10, QFont::Bold);
textLabel->setFont( f);

您可以尝试Button.setTextSize() 按钮继承自TextView。如果你在设计时这样做,你可以使用textSize属性。如果你在设计时这样做,你可以像下面这样应用textSize:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="New Button"
    android:id="@+id/button"
    android:layout_gravity="center"
    android:textSize="25sp"
    />

当您从java代码中执行此操作时,您可以执行以下操作:

// Set textsize to 20px here
button.setTextSize(TypedValue.COMPLEX_UNIT_PX, 20); 

相关内容

  • 没有找到相关文章

最新更新