更改 Android 中 Button 的字体大小,同时保持原生
Change font size of a Button in Android while remaining native
我想更改按钮的字体大小。我使用了 here
的解决方案
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?
有什么方法可以在不丢失原生样式的情况下更改字体大小
我想更改单个按钮的外观并希望其他按钮保持不变。我在 QML 中使用 Qt5 (C++)。我不想要涉及复制整个 QtQuick/Controls/Styles/Android 文件夹的解决方案 - 我可以自己完成,但它很糟糕
您尝试过使用Usefont.pixelSize
或尝试以下方法
QFont f( "Arial", 10, QFont::Bold);
textLabel->setFont( f);
你可以试试Button.setTextSize()
Button继承自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);
警告:此解决方案依赖于修改内部对象,不保证在不同的 Qt 版本或平台上工作
如果您绝对只想修改未公开的对象的 属性,您仍然可以使用 Item
的 children
属性 访问它(或 resources
/data
)。
在 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;
}
}
}
}
我想更改按钮的字体大小。我使用了 here
的解决方案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?
有什么方法可以在不丢失原生样式的情况下更改字体大小我想更改单个按钮的外观并希望其他按钮保持不变。我在 QML 中使用 Qt5 (C++)。我不想要涉及复制整个 QtQuick/Controls/Styles/Android 文件夹的解决方案 - 我可以自己完成,但它很糟糕
您尝试过使用Usefont.pixelSize
或尝试以下方法
QFont f( "Arial", 10, QFont::Bold);
textLabel->setFont( f);
你可以试试Button.setTextSize()
Button继承自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);
警告:此解决方案依赖于修改内部对象,不保证在不同的 Qt 版本或平台上工作
如果您绝对只想修改未公开的对象的 属性,您仍然可以使用 Item
的 children
属性 访问它(或 resources
/data
)。
在 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;
}
}
}
}