小编poo*_*tle的帖子

Android自定义布局属性"引用属性"格式?

我有一个自定义视图(扩展视图组),我已经指定了一些在attrs.xml中定义的自定义属性....

<declare-styleable name="datascope">
    <attr name="colcount" format="integer" />
    <attr name="titleheaderrows" format="integer" />
    <attr name="colheaderrows" format="integer" />
    <attr name="rowlayout" format="reference" />
</declare-styleable>
Run Code Online (Sandbox Code Playgroud)

整数我可以很好,但最后一个 - rowlayout我想用来引用我将按需膨胀的另一个布局文件.但我找不到在主布局文件中表达rowlayout属性的正确方法.我试过了:

lui:rowlayout="@layout/sensorvaluesdata">
Run Code Online (Sandbox Code Playgroud)

但这在运行时失败:

E/AndroidRuntime(22092):引起:java.lang.NumberFormatException:无法将'res/layout/sensorvaluesdata.xml'解析为整数

lui:rowlayout="?layout/sensorvaluesdata"
Run Code Online (Sandbox Code Playgroud)

哪个失败了

E/AndroidRuntime(22341):引起:java.lang.NumberFormatException:无法解析'?2130903043'为整数

这很有意思'因为它似乎已经将资源ID卡在那里,但也坚持?在前面.

我的R.java文件确实有一个明智的行sensorvaluesdata.

public static final class layout {

    public static final int sensorvaluesdata=0x7f030003;

}
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?

(我可以将信息硬编码到java源代码中,并且工作正常....

View vx = li.inflate(R.layout.sensorvaluesdata, this, false);
Run Code Online (Sandbox Code Playgroud)

android custom-controls android-layout android-xml declare-styleable

6
推荐指数
1
解决办法
6465
查看次数

tkinter 协议 WM_DELETE_WINDOW 不适用于额外的窗口

我想在我的 tkinter 应用程序中运行一些额外的窗口(tkinter 8.6、python 3.5、ubuntu xenial)。虽然我可以从主应用程序中选择删除窗口协议,但它永远不会在其他窗口上被调用。我想让用户用“X”关闭窗口,但我确实需要知道他们何时这样做。

我希望一旦我看到答案,答案就会非常明显!

这个简单的测试应用程序演示了......

#!/usr/bin/python3

import tkinter

class app(tkinter.Tk):
    def __init__(self):
        super().__init__()
        self.child1 = None
        self.geometry('600x400')
        w = tkinter.Button(self, command=self.bclick, text='button1')
        w.pack()
        self.protocol("WM_DELETE_WINDOW", self.appClose)

    def bclick(self):
        if self.child1 == None:
            self.child1 = tkinter.Toplevel()
        else:
            self.child1.destroy()
            self.child1 = None

    def appClose(self):
        print('main app close')
        self.destroy()

class wind1(tkinter.Toplevel):
    def __init__(self):
        super().__init__()
        self.title('window 1')
        self.protocol("WM_DELETE_WINDOW", self.window1Close)
        self.geometry('600x400')

    def window1Close(self):
        print("window1Close")
        self.destroy()

if __name__=="__main__":
    print(tkinter.TkVersion)
    app().mainloop()
Run Code Online (Sandbox Code Playgroud)

python linux tkinter python-3.x

0
推荐指数
1
解决办法
5443
查看次数