{"id":1141,"date":"2024-10-02T23:07:00","date_gmt":"2024-10-02T21:07:00","guid":{"rendered":"https:\/\/www.pinguytaz.net\/?p=1141"},"modified":"2024-09-10T02:10:31","modified_gmt":"2024-09-10T00:10:31","slug":"crear-extensiones-para-appinventor-propiedades-5","status":"publish","type":"post","link":"https:\/\/www.pinguytaz.net\/index.php\/2024\/10\/02\/crear-extensiones-para-appinventor-propiedades-5\/","title":{"rendered":"Crear extensiones para AppInventor (Propiedades) 5"},"content":{"rendered":"\n<p>En este POST hablaremos de como programar las propiedades, las propiedades podr\u00e1n modificarse no solo desde el \u00e1rea de bloque sino desde el \u00e1rea del  dise\u00f1ador como cuando usamos componentes visuales.<\/p>\n\n\n\n<figure class=\"wp-block-image alignleft size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"524\" height=\"123\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/08\/image-6.png\" alt=\"\" class=\"wp-image-1145\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/08\/image-6.png 524w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/08\/image-6-300x70.png 300w\" sizes=\"auto, (max-width: 524px) 100vw, 524px\" \/><\/figure>\n\n\n\n<p>Las propiedades son variables publicas de las clases a las que accede mediante funciones \u00ab<strong>Get_<\/strong>\u00bb para obtener su valor y \u00ab<strong>Set_<\/strong>\u00bb para cambiarles el valor, en realidad esta funciones pueden llamarse como deseemos pero lo normal es que las nombremos as\u00ed.<\/p>\n\n\n\n<p>Nuestro ejemplo tendr\u00e1 un m\u00e9todo \u00ab<strong>Multiplica\u00bb<\/strong> al que le pasamos un par\u00e1metro y lo multiplicara por el valor de la propiedad \u00ab<strong>multiplicador<\/strong>\u00bb de forma que retornara el resultado. A esta clase la llamaremos <em><strong>Propiedades<\/strong><\/em> y el fuente que es el que estudiaremos se encuentra en <a href=\"https:\/\/github.com\/pinguytaz\/extAppInventor\/blob\/main\/Ejemplos\/src\/losejemplos\/Propiedades.java\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/pinguytaz\/extAppInventor\/blob\/main\/Ejemplos\/src\/losejemplos\/Propiedades.java <\/a><\/p>\n\n\n\n<p>Las propiedades de la clase ser\u00e1n privadas y se acceder\u00e1n a ellas mediante los m\u00e9todos p\u00fablicos caracterizados por la anotaci\u00f3n <strong>@SimpleProperty<\/strong> para que convierta ese m\u00e9todo como un bloque propiedad. Estos m\u00e9todos tendr\u00e1n dos misiones:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li> Dar un valor \u00ab<strong>Get_<\/strong>\u00bb que no tendr\u00e1n par\u00e1metro y si un retorno que es el valor de la propiedad.<\/li>\n\n\n\n<li>Poner un valor en la propiedad \u00ab<strong>Set_<\/strong>\u00bb que no retornan ning\u00fan valor y tendr\u00e1n un par\u00e1metro con el valor a poner en la propiedad.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>private int multiplicador = 0; \/\/Definimos la propiedad como privada y ser\u00e1n lo m\u00e9todos publicos quien traten su valor.\n\n @SimpleProperty (category = PropertyCategory.BEHAVIOR, description=\"Retorna el valor del multiplicador\")\n   public int Get_multiplicador() {\n      return multiplicador;\n   }\n   @SimpleProperty (category = PropertyCategory.BEHAVIOR, description=\"Pone el valor al multiplicador\")\n   public void Set_multiplicador(int multiplicador) {\n       this.multiplicador=multiplicador;\n   }\n<\/code><\/pre>\n\n\n\n<p>Los par\u00e1metros que tendr\u00e1 la anotaci\u00f3n <strong>@SimpleProperty<\/strong> son:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>description<\/strong>   En el que pondremos la descripci\u00f3n del bloque.<\/li>\n\n\n\n<li><strong>userVisible<\/strong> que pondremos a <strong>true<\/strong> para que la propiedad sea visible por el usuario, salvo que como veremos m\u00e1s adelante sea una propiedad del dise\u00f1ador y no queramos que aparezca en el area de bloques, que en ese caso pondremos a <strong>false<\/strong><\/li>\n\n\n\n<li><strong>category<\/strong> que se utilizara si la propiedad se tiene que ver en el \u00e1rea de dise\u00f1o <strong>@DesignerProperty<\/strong> que se ve m\u00e1s adelante. Estas propiedades son \u00ab<strong>PropertyCategory. &lt;<em>VALOR<\/em>&gt;<\/strong>\u00bb y pueden ser:  <strong>BEHAVIOR<\/strong> (cambia comportamiento del componente),  <strong>APPEARANCE<\/strong> (Cambia apariencia), <br><strong>APPLICATION<\/strong> (Propiedad de la aplicaci\u00f3n) y por regla general pondremos \u00ab<strong>BEHAVIOR<\/strong>\u00ab<br><\/li>\n<\/ul>\n\n\n\n<p>Ya hemos visto lo sencillo que es pero tambi\u00e9n podemos tener propiedades que se modifiquen y vean desde el \u00e1rea de dise\u00f1o, de la misma forma que vemos las propiedades de los controles visuales, para esto definimos @<strong>DesignerProperty<\/strong> antes de lo m\u00e9todo junto a <strong>@SimpleProperty<\/strong>, los par\u00e1metros en este caso son:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>editorType<\/strong> (Cadena): Tipo de editor que se mostrar\u00e1 en la propiedad PropertyTypeConstants.PROPERTY_TYPE_&lt;tipo&gt;: STRING, BOOLEAN, COLOR, COMPONET, FLOAT, INTEGER, TEXT, TEXTALIGNMENT, TYPEFACE (Letra), CHOICE (Ver editorArgs), etc.<\/li>\n\n\n\n<li><strong>defaultValue<\/strong> (Cadena): Valor por defecto de la propiedad.<\/li>\n\n\n\n<li><strong>editorArgs<\/strong> (String[]): Si el tipo es <strong>PROPERTY_TYPE_CHOICES<\/strong>, en editorArgs especificamos los valores permitidos.<\/li>\n\n\n\n<li><strong>AlwaysSend<\/strong> (booleano): Si es verdadero, siempre se enviar\u00e1 el valor de la propiedad, por defecto es falso.<\/li>\n<\/ul>\n\n\n\n<p>En este caso el nombre del m\u00e9todo sera el que salga en las propiedades del dise\u00f1ador, as\u00ed que no seguiremos la nomenclatura \u00abSet_ y Get_\u00bb y solo tendremos uno (seria el SET) ya que se modifica en tiempo de dise\u00f1o. Aunque podremos tener tambi\u00e9n m\u00e9todos en el \u00e1rea de bloques para ver el valor o tocar esa propiedad en el \u00e1rea de bloques.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> \/\/ Propiedad de dise\u00f1o\n   @DesignerProperty(editorType = PropertyTypeConstants.PROPERTY_TYPE_BOOLEAN)   \/\/ Vemos que definimos tipo Check\n   @SimpleProperty (category = PropertyCategory.BEHAVIOR, userVisible=false, description=\"Pone si se multiplica o no por 10.\")\n   public void MultiplicaPorDiez(boolean por10) {\n       this.por10=por10;\n   }\n   \/\/ Propiedad que si se vera en el area de bloques y nos dar\u00e1 el valor de la propiedad.\n   @SimpleProperty (description=\"Multiplica por 10 o no\")\n   public boolean Get_por10() {\n       return por10;\n   }\n<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En este POST hablaremos de como programar las propiedades, las propiedades podr\u00e1n modificarse no solo desde el \u00e1rea de bloque sino desde el \u00e1rea del dise\u00f1ador como cuando usamos componentes visuales. Las propiedades son variables publicas de las clases a las que accede mediante funciones \u00abGet_\u00bb para obtener su valor y \u00abSet_\u00bb para cambiarles el [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1145,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-container-style":"default","site-container-layout":"default","site-sidebar-layout":"default","disable-article-header":"default","disable-site-header":"default","disable-site-footer":"default","disable-content-area-spacing":"default","footnotes":""},"categories":[2,6,12],"tags":[21,199,33,203],"class_list":["post-1141","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-android","category-java","category-openjdk","tag-android","tag-appinventor","tag-java","tag-propiedades"],"_links":{"self":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/1141","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/comments?post=1141"}],"version-history":[{"count":4,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/1141\/revisions"}],"predecessor-version":[{"id":1164,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/1141\/revisions\/1164"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/media\/1145"}],"wp:attachment":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/media?parent=1141"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/categories?post=1141"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/tags?post=1141"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}