【问题标题】:Pebble not displaying textPebble 不显示文本
【发布时间】:2014-03-13 19:28:19
【问题描述】:

所以,我正在构建一个 pebble 应用程序,为了搞清楚一些事情,我首先对电话到 pebble 的连接进行了一些测试。尽管像往常一样在 C 中,我被困在最基本的部分。初始文本没有显示,屏幕只是空白。

以下是相关代码:

static void change_text(Layer *layer, GContext *ctx){
    text_layer_set_text(textLayer, textRecieved);
    APP_LOG(APP_LOG_LEVEL_DEBUG, "Changing to: %s", textRecieved);
}

static void window_load(Window *window){

    GRect bounds = layer_get_bounds(window_get_root_layer(window));
    textLayer = text_layer_create(GRect(5,5, bounds.size.w-10, 30));

    textRecieved = (char *) malloc(BUFFER_SIZE);
    memset(textRecieved,0,BUFFER_SIZE);
    strcpy(textRecieved, "Nothing yet.");

    text_layer_set_text(textLayer, textRecieved);
    layer_add_child(window_get_root_layer(window), text_layer_get_layer(textLayer));

    APP_LOG(APP_LOG_LEVEL_DEBUG, "Recieved: %s", textRecieved);
    layer_set_update_proc(text_layer_get_layer(textLayer), change_text);    
}

相关变量定义(在文件的最顶部):

TextLayer* textLayer;
const int BUFFER_SIZE = 100;
char* textRecieved;

如果我注释掉 *layer_set_update_proc(...);* 行,我可以看到文本。我可能在 change_text 方法中做错了。 (它在window_load 之后不久被调用。)我的调试打印输出是:

[DEBUG] app_message.c:70: Recieved: Nothing yet.
[DEBUG] app_message.c:55: Changing to: Nothing yet.

【问题讨论】:

  • 你为什么打电话给layer_set_update_proc?这会覆盖文本层的绘制行为,因此它不会自行绘制。
  • 哦!我认为这是编辑任何元素的正确方法。所以我可以随心所欲地更改文本?

标签: c pebble-watch


【解决方案1】:

您不应致电layer_set_update_proc()。通过这样做,您将覆盖默认的text_layer 绘图机制。这就是您在屏幕上看不到任何内容的原因。

其他几个cmets:

  • 是的,您可以随时致电text_layer_set_text()
  • 使用strncpy(textRecieved, "Nothing yet", sizeof(textRecieved)); 代替memset+strcpy

【讨论】:

    猜你喜欢
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    相关资源
    最近更新 更多