How to create vertical arrangment using an extension?

#off-topic
Is there any advantage to using this online editor, besides not having to install ( ant ,gith,VS ) it on our computer?

2 Likes
Buildfile: /projects/goldv2/appinventor-sources/appinventor/build.xml

extensions:

clean:

init:

common_CommonUtils:

init:

CommonUtils:

common_CommonVersion:

init:

CommonVersion:
     [exec] Result: 128
     [exec] Result: 128

CopyToRunLibDir:

components_AndroidRuntime:

init:

CommonConstants:
    [javac] Compiling 6 source files to /projects/goldv2/appinventor-sources/appinventor/components/build/classes/CommonConstants
    [javac] warning: [options] bootstrap class path not set in conjunction with -source 1.7
    [javac] 1 warning
    [javac] Creating empty /projects/goldv2/appinventor-sources/appinventor/components/build/classes/CommonConstants/com/google/appinventor/components/common/package-info.class
      [jar] Building jar: /projects/goldv2/appinventor-sources/appinventor/build/components/CommonConstants.jar
      [jar] Building jar: /projects/goldv2/appinventor-sources/appinventor/build/components/CommonConstants-gwt.jar

HtmlEntities:
    [mkdir] Created dir: /projects/goldv2/appinventor-sources/appinventor/components/build/classes/HtmlEntities
    [javac] Compiling 1 source file to /projects/goldv2/appinventor-sources/appinventor/components/build/classes/HtmlEntities
    [javac] warning: [options] bootstrap class path not set in conjunction with -source 1.7
    [javac] 1 warning
      [jar] Building jar: /projects/goldv2/appinventor-sources/appinventor/components/build/HtmlEntities.jar

common_CommonVersion:

init:

CommonVersion:
     [exec] Result: 128
     [exec] Result: 128

AndroidRuntime:
    [mkdir] Created dir: /projects/goldv2/appinventor-sources/appinventor/components/build/classes/AndroidRuntime
    [javac] Compiling 332 source files to /projects/goldv2/appinventor-sources/appinventor/components/build/classes/AndroidRuntime
    [javac] warning: [options] bootstrap class path not set in conjunction with -source 1.7
    [javac] /projects/goldv2/appinventor-sources/appinventor/components/src/com/appybuilder/sohamtshah2005/Mjkl4/Mjkl4.java:16: error: class DynamicArrangements is public, should be declared in a file named DynamicArrangements.java
    [javac] public class DynamicArrangements extends AndroidNonvisibleComponent {
    [javac]        ^
    [javac] /projects/goldv2/appinventor-sources/appinventor/components/src/com/appybuilder/sohamtshah2005/Mjkl4/Mjkl4.java:27: error: cannot find symbol
    [javac]       new HVArrangement((ComponentContainer)arrangement);
    [javac]                                             ^
    [javac]   symbol:   variable arrangement
    [javac]   location: class DynamicArrangements
    [javac] /projects/goldv2/appinventor-sources/appinventor/components/src/com/appybuilder/sohamtshah2005/Mjkl4/Mjkl4.java:27: error: constructor HVArrangement in class HVArrangement cannot be applied to given types;
    [javac]       new HVArrangement((ComponentContainer)arrangement);
    [javac]       ^
    [javac]   required: ComponentContainer,int,boolean
    [javac]   found: ComponentContainer
    [javac]   reason: actual and formal argument lists differ in length
    [javac] Note: Some input files use or override a deprecated API.
    [javac] Note: Recompile with -Xlint:deprecation for details.
    [javac] Note: Some input files use unchecked or unsafe operations.
    [javac] Note: Recompile with -Xlint:unchecked for details.
    [javac] 3 errors
    [javac] 1 warning

BUILD FAILED
/projects/goldv2/appinventor-sources/appinventor/build.xml:35: The following error occurred while executing this line:
/projects/goldv2/appinventor-sources/appinventor/build-common.xml:372: The following error occurred while executing this line:
/projects/goldv2/appinventor-sources/appinventor/components/build.xml:141: The following error occurred while executing this line:
/projects/goldv2/appinventor-sources/appinventor/build-common.xml:118: Compile failed; see the compiler error output for details.

Total time: 8 seconds
oldv2/appinventor-sources/appinventor/build.xml:35: The following error occurred while executing this line:
/projects/goldv2/appinventor-sources/appinventor/build-common.xml:372: The following error occurred while executing this line:
/projects/goldv2/appinventor-sources/appinventor/components/build.xml:141: The following error occurred while executing this line:
/projects/goldv2/appinventor-sources/appinventor/build-common.xml:118: Compile failed; see the compiler error output for details.

Total time: 8 seconds

For me there’s only one. The time when I was restricted to install anything to my pc.

Using online editor cannot rename the project (java) namr, therefore the class name must be the same as the project name.

There is no variable called arrangement, I think you want to type component.

In HVArrangement class, creating a new arrangement need a component container, an integer and a boolean.

@WatermelonIce, can you please edit the code and change whatever is wrong?

Let me check the source code of HVArrangement first and see how it works :wink:

In HVArrangement:


You need to specify container, orientation and scrollable.
Therefore,

import android.content.Context;
import android.util.Log;
import com.google.appinventor.components.annotations.*;
import com.google.appinventor.components.runtime.*;
import com.google.appinventor.components.common.ComponentCategory;
import com.google.appinventor.components.common.ComponentConstants;
import android.view.View;

@DesignerComponent(version = 1,  description = " made by Soham Shah",
        category = ComponentCategory.EXTENSION,
        nonVisible = true,   iconName = "http://yusufcihan.com/img/favicon.png")
@SimpleObject(external = true)
public class DynamicArrangements extends AndroidNonvisibleComponent {
    private ComponentContainer container;
    /**
     * @param container container, component will be placed in
     */
    public DynamicArrangements(ComponentContainer container) {
        super(container.$form());
        this.container = container;
    }
   @SimpleFunction(description = "Creates a dynamic arrangement in selected arrangement.")
    public void CreateArrangement(AndroidViewComponent component) {
      new HVArrangement((ComponentContainer)component, LAYOUT_ORIENTATION_HORIZONTAL /*or LAYOUT_ORIENTATION_VERTICAL*/, true //or false depends on scrollable or not)
}

Note

  1. Constant of orientation:
static final int LAYOUT_ORIENTATION_HORIZONTAL = ComponentConstants.LAYOUT_ORIENTATION_HORIZONTAL; //0

static final int LAYOUT_ORIENTATION_VERTICAL = ComponentConstants.LAYOUT_ORIENTATION_VERTICAL; //1

can you please send the code like you did for below so i can copy and paste

It is from github

You can easily try @yusufcihan source code as i’ve said earlier :

No need to copy all code of the HVArrangement in your extension.Simply import

com.google.appinventor.components.runtime.HVArrangement

Here the output of this constructor ( HVArrangement ) will be better if it was assigned to a variable so you can use later.Something like:

HVArrangement myArrangement = new HVArrangement ( layout,orentationEnum,scrollable );

Well actually I am just showing the code and tell him what should he deals with parameters

1 Like

I thought you told him that becuase he said send me the code, so you sent him the github link :grin: .Any way, he still need to import the HVArrangement class, or at least import its parent packagecom.google.appinventor.components.runtime.*; :man_shrugging:

Just tested, after removing unnecessary imports in my post 11, it works.

1 Like

so what do i need to change?

Did you not see my test code…

1 Like

Also you can see this.It should do it properly :slightly_smiling_face:

1 Like

i copied the same code but i get the error:

Buildfile: /projects/goldv2/appinventor-sources/appinventor/build.xml

extensions:

clean:

init:

common_CommonUtils:

init:

CommonUtils:

common_CommonVersion:

init:

CommonVersion:
     [exec] Result: 128
     [exec] Result: 128

CopyToRunLibDir:

components_AndroidRuntime:

init:

CommonConstants:
    [javac] Compiling 6 source files to /projects/goldv2/appinventor-sources/appinventor/components/build/classes/CommonConstants
    [javac] warning: [options] bootstrap class path not set in conjunction with -source 1.7
    [javac] 1 warning

HtmlEntities:
    [javac] Compiling 1 source file to /projects/goldv2/appinventor-sources/appinventor/components/build/classes/HtmlEntities
    [javac] warning: [options] bootstrap class path not set in conjunction with -source 1.7
    [javac] 1 warning

common_CommonVersion:

init:

CommonVersion:
     [exec] Result: 128
     [exec] Result: 128

AndroidRuntime:
    [javac] Compiling 332 source files to /projects/goldv2/appinventor-sources/appinventor/components/build/classes/AndroidRuntime
    [javac] warning: [options] bootstrap class path not set in conjunction with -source 1.7
    [javac] /projects/goldv2/appinventor-sources/appinventor/components/src/com/appybuilder/sohamtshah2005/Mjkl4/Mjkl4.java:25: error: class DynamicArrangements is public, should be declared in a file named DynamicArrangements.java
    [javac] public class DynamicArrangements extends AndroidNonvisibleComponent {
    [javac]        ^
    [javac] Note: Some input files use or override a deprecated API.
    [javac] Note: Recompile with -Xlint:deprecation for details.
    [javac] Note: Some input files use unchecked or unsafe operations.
    [javac] Note: Recompile with -Xlint:unchecked for details.
    [javac] 1 error
    [javac] 1 warning

BUILD FAILED
/projects/goldv2/appinventor-sources/appinventor/build.xml:35: The following error occurred while executing this line:
/projects/goldv2/appinventor-sources/appinventor/build-common.xml:372: The following error occurred while executing this line:
/projects/goldv2/appinventor-sources/appinventor/components/build.xml:141: The following error occurred while executing this line:
/projects/goldv2/appinventor-sources/appinventor/build-common.xml:118: Compile failed; see the compiler error output for details.

Total time: 7 seconds
ojects/goldv2/appinventor-sources/appinventor/components/build/HtmlEntities.jar

common_CommonVersion:

init:

CommonVersion:
     [exec] Result: 128
     [exec] Result: 128

AndroidRuntime:
    [mkdir] Created dir: /projects/goldv2/appinventor-sources/appinventor/components/build/classes/AndroidRuntime
    [javac] Compiling 332 source files to /projects/goldv2/appinventor-sources/appinventor/components/build/classes/AndroidRuntime
    [javac] warning: [options] bootstrap class path not set in conjunction with -source 1.7
    [javac] /projects/goldv2/appinventor-sources/appinventor/components/src/com/appybuilder/sohamtshah2005/Mjkl4/Mjkl4.java:25: error: class DynamicArrangements is public, should be declared in a file named DynamicArrangements.java
    [javac] public class DynamicArrangements extends AndroidNonvisibleComponent {
    [javac]        ^
    [javac] Note: Some input files use or override a deprecated API.
    [javac] Note: Recompile with -Xlint:deprecation for details.
    [javac] Note: Some input files use unchecked or unsafe operations.
    [javac] Note: Recompile with -Xlint:unchecked for details.
    [javac] 1 error
    [javac] 1 warning

BUILD FAILED
/projects/goldv2/appinventor-sources/appinventor/build.xml:35: The following error occurred while executing this line:
/projects/goldv2/appinventor-sources/appinventor/build-common.xml:372: The following error occurred while executing this line:
/projects/goldv2/appinventor-sources/appinventor/components/build.xml:141: The following error occurred while executing this line:
/projects/goldv2/appinventor-sources/appinventor/build-common.xml:118: Compile failed; see the compiler error output for details.

Total time: 6 seconds

What is the name of your project?It should be DynamicArrangements
If your project has another name, rename this one:

To the name of your project.

name of project is Mjkl4.java
so i should change it to
public class Mjkl4 extends AndroidNonvisibleComponent {
?

1 Like

yes it should be :wink:

@Mohamed_Tamer i am able to create the same dynamic arrangements extension but it requires user to input what sort of arrangement user wants, whereas i want to directly create verticalarrangement

code:

/**  ~~~~~
 * Created with the AppyBuilder Code Editor.
 * This is a template for basic Extension.
 * Modify this template to customize your extension.
 *
 * **** NOTE: DO NOT use a package name. 
 * **** The package name will be created for you automatically.
 * **** Adding a package name will cause a compile error
 */
import android.content.Context;
import android.util.Log;
import com.google.appinventor.components.annotations.*;
import com.google.appinventor.components.runtime.*;
import com.google.appinventor.components.common.ComponentCategory;
import com.google.appinventor.components.common.ComponentConstants;
import android.view.View;
import com.google.appinventor.components.runtime.HVArrangement;

@DesignerComponent(version = 1,  description = "Extension By Soham Shah.",
        category = ComponentCategory.EXTENSION,
        nonVisible = true,   iconName = "http://yusufcihan.com/img/favicon.png")
@SimpleObject(external = true)
public class Mjkl4 extends AndroidNonvisibleComponent {
    private ComponentContainer container;
    /**
     * @param container container, component will be placed in
     */
    public Mjkl4(ComponentContainer container) {
        super(container.$form());
        this.container = container;
    }
  
  /*  @SimpleEvent(description = "This event called when any arrangement clicked that created by CreateArrangement block.")
    public void OnClick(AndroidViewComponent arrangement) {
      EventDispatcher.dispatchEvent(this, "OnClick", arrangement);
    }*/
  
    @SimpleFunction(description = "Creates a dynamic arrangement in selected arrangement.")
    public Object CreateArrangement(AndroidViewComponent arrangement, /*int orientation, boolean scrollable, final boolean clickable*/) {
        final HVArrangement hv = new HVArrangement((ComponentContainer)arrangement, LAYOUT_ORIENTATION_VERTICAL, false);
        /*hv.getView().setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
                 if (clickable) {
                     OnClick(hv);
                 }
             }
         });*/
        return hv;
    }
  
  /*  @SimpleFunction(description = "Specifies the component's vertical height, measured in pixels.")
    public void SetHeight(AndroidViewComponent component, int height) {
        ((HVArrangement)component).Height(height);
    }
  
    @SimpleFunction(description = "Returns the component's vertical height, measured in pixels.")
    public int GetHeight(AndroidViewComponent component) {
        return ((HVArrangement)component).Height();
    }
  
    @SimpleFunction(description = "Sets the background color for an arrangement.")
    public void SetBackgroundColor(AndroidViewComponent component, int color) {
        ((HVArrangement)component).getView().setBackgroundColor(color);
    }
  
    @SimpleFunction(description = "Sets the degrees that the arrangement is rotated around the pivot point. Increasing values result in clockwise rotation.")
    public void SetRotation(AndroidViewComponent component, float rotation) {
        ((HVArrangement)component).getView().setRotation(rotation);
    }
  
    @SimpleFunction(description = "The degrees that the arrangement is rotated around the pivot point.")
    public float GetRotation(AndroidViewComponent component) {
        return ((HVArrangement)component).getView().getRotation();
    }
  
     @SimpleFunction(description = "Specifies the component's horizontal width, measured in pixels.")
    public void SetWidth(AndroidViewComponent component, int width) {
        ((HVArrangement)component).Width(width);
    }
  
    @SimpleFunction(description = "Returns the component's horizontal width, measured in pixels.")
    public int GetWidth(AndroidViewComponent component) {
        return ((HVArrangement)component).Width();
    }
  
    @SimpleFunction(description = "Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.")
    public void SetVisibility(AndroidViewComponent component, boolean visibility) {
        ((HVArrangement)component).Visible(visibility);
    }
  
    @SimpleFunction(description = "Returns true if the component is visible.")
    public boolean GetVisibility(AndroidViewComponent component) {
        return ((HVArrangement)component).Visible();
    }
  
    @SimpleFunction(description = "Sets the vertical or horizontal alignment for contents of the arrangement. The choices are: 1 = top/left, 2 = vertically/horizontally centered, 3 = bottom/right. Alignment has no effect if the arrangement's height is automatic. ")
    public void SetAlign(AndroidViewComponent component, int orientation, int align) {
      if (orientation == ComponentConstants.LAYOUT_ORIENTATION_HORIZONTAL)
      {
        ((HVArrangement)component).AlignHorizontal(align);
      }
      else if(orientation == ComponentConstants.LAYOUT_ORIENTATION_VERTICAL)
      {
        ((HVArrangement)component).AlignVertical(align);
      }
        
    }
  
  	@SimpleFunction(description = "Returns a number that encodes how contents of the arrangement are aligned vertically or horizontally.")
    public int GetAlign(AndroidViewComponent component, int orientation) {
      int result = 0;
      if (orientation == ComponentConstants.LAYOUT_ORIENTATION_HORIZONTAL)
      {
        result = ((HVArrangement)component).AlignHorizontal();
      }
      else if(orientation == ComponentConstants.LAYOUT_ORIENTATION_VERTICAL)
      {
        result = ((HVArrangement)component).AlignVertical();
      }
      return result;
    }
    
    @SimpleProperty(description = "Horizontal layout orientation.")
    public int HorizontalOrientation() {
        return ComponentConstants.LAYOUT_ORIENTATION_HORIZONTAL;
    }
  
  	@SimpleProperty(description = "Vertical layout orientation.")
    public int VerticalOrientation() {
        return ComponentConstants.LAYOUT_ORIENTATION_VERTICAL;
    }*/
  
} 

error:

Buildfile: /projects/goldv2/appinventor-sources/appinventor/build.xml

extensions:

clean:
   [delete] Deleting directory /projects/goldv2/appinventor-sources/appinventor/components/build

BUILD FAILED
/projects/goldv2/appinventor-sources/appinventor/build.xml:34: The following error    [delete] Deleting directory /projects/goldv2/appinventor-sources/appinventor/components/reports

init:

common_CommonUtils:

init:

CommonUtils:

common_CommonVersion:

init:

CommonVersion:
     [exec] Result: 128
     [exec] Result: 128

CopyToRunLibDir:

components_AndroidRuntime:

init:
    [mkdir] Created dir: /projects/goldv2/appinventor-sources/appinventor/build/components
    [mkdir] Created dir: /projects/goldv2/appinventor-sources/appinventor/components/build
    [mkdir] Created dir: /projects/goldv2/appinventor-sources/appinventor/components/build/classes
    [mkdir] Created dir: /projects/goldv2/appinventor-sources/appinventor/components/reports
    [mkdir] Created dir: /projects/goldv2/appinventor-sources/appinventor/components/reports/raw
    [mkdir] Created dir: /projects/goldv2/appinventor-sources/appinventor/components/reports/html

CommonConstants:
    [mkdir] Created dir: /projects/goldv2/appinventor-sources/appinventor/components/build/classes/CommonConstants
    [javac] Compiling 6 source files to /projects/goldv2/appinventor-sources/appinventor/components/build/classes/CommonConstants
    [javac] warning: [options] bootstrap class path not set in conjunction with -source 1.7
    [javac] 1 warning
    [javac] Creating empty /projects/goldv2/appinventor-sources/appinventor/components/build/classes/CommonConstants/com/google/appinventor/components/common/package-info.class
      [jar] Building jar: /projects/goldv2/appinventor-sources/appinventor/build/components/CommonConstants.jar
      [jar] Building jar: /projects/goldv2/appinventor-sources/appinventor/build/components/CommonConstants-gwt.jar

HtmlEntities:
    [mkdir] Created dir: /projects/goldv2/appinventor-sources/appinventor/components/build/classes/HtmlEntities
    [javac] Compiling 1 source file to /projects/goldv2/appinventor-sources/appinventor/components/build/classes/HtmlEntities
    [javac] warning: [options] bootstrap class path not set in conjunction with -source 1.7
    [javac] 1 warning
      [jar] Building jar: /projects/goldv2/appinventor-sources/appinventor/components/build/HtmlEntities.jar

common_CommonVersion:

init:

CommonVersion:
     [exec] Result: 128
     [exec] Result: 128

AndroidRuntime:
    [mkdir] Created dir: /projects/goldv2/appinventor-sources/appinventor/components/build/classes/AndroidRuntime
    [javac] Compiling 332 source files to /projects/goldv2/appinventor-sources/appinventor/components/build/classes/AndroidRuntime
    [javac] warning: [options] bootstrap class path not set in conjunction with -source 1.7
    [javac] /projects/goldv2/appinventor-sources/appinventor/components/src/com/appybuilder/sohamtshah2005/Mjkl4/Mjkl4.java:42: error: illegal start of type
    [javac]     public Object CreateArrangement(AndroidViewComponent arrangement, /*int orientation, boolean scrollable, final boolean clickable*/) {
    [javac]                                                                                                                                       ^
    [javac] /projects/goldv2/appinventor-sources/appinventor/components/src/com/appybuilder/sohamtshah2005/Mjkl4/Mjkl4.java:42: error: ')' expected
    [javac]     public Object CreateArrangement(AndroidViewComponent arrangement, /*int orientation, boolean scrollable, final boolean clickable*/) {
    [javac]                                                                                                                                        ^
    [javac] /projects/goldv2/appinventor-sources/appinventor/components/src/com/appybuilder/sohamtshah2005/Mjkl4/Mjkl4.java:42: error: ';' expected
    [javac]     public Object CreateArrangement(AndroidViewComponent arrangement, /*int orientation, boolean scrollable, final boolean clickable*/) {
    [javac]                                                                                                                                          ^
    [javac] /projects/goldv2/appinventor-sources/appinventor/components/src/com/appybuilder/sohamtshah2005/Mjkl4/Mjkl4.java:51: error: illegal start of type
    [javac]         return hv;
    [javac]         ^
    [javac] /projects/goldv2/appinventor-sources/appinventor/components/src/com/appybuilder/sohamtshah2005/Mjkl4/Mjkl4.java:51: error: ';' expected
    [javac]         return hv;
    [javac]               ^
    [javac] /projects/goldv2/appinventor-sources/appinventor/components/src/com/appybuilder/sohamtshah2005/Mjkl4/Mjkl4.java:136: error: class, interface, or enum expected
    [javac] }
    [javac] ^
    [javac] 6 errors
    [javac] 1 warning

BUILD FAILED
/projects/goldv2/appinventor-sources/appinventor/build.xml:35: The following error occurred while executing this line:
/projects/goldv2/appinventor-sources/appinventor/build-common.xml:372: The following error occurred while executing this line:
/projects/goldv2/appinventor-sources/appinventor/components/build.xml:141: The following error occurred while executing this line:
/projects/goldv2/appinventor-sources/appinventor/build-common.xml:118: Compile failed; see the compiler error output for details.

Total time: 2 seconds