Ad

Friday, January 14, 2011

Android 2.3 is here and what does it bring?

Android 2.3 (Gingerbread) has been released on the 6th of December 2010. While it is still a minor release, Android 3.0 (Honeycomb) would probably bring greater surprises. Atleast I am hoping that there would be the "Wow" factor with it.

Here are a few features of the Gingerbread version:
  • Updated user interface design
  • Support for extra-large screen sizes and resolutions (WXGA and higher)
  • Native support for SIP VoIP telephony
  • Support for WebM/VP8 video playback, and AAC audio encoding
  • New audio effects such as reverb, equalization, headphone virtualization, and bass boost
  • Support for Near Field Communication
  • System-wide copy–paste functionalities
  • Redesigned multi-touch software keyboard
  • Enhanced support for native code development
  • Audio, graphical, and input enhancements for game developers
  • Concurrent garbage collection for increased performance
  • Native support for more sensors (such as gyroscopes and barometers)
  • A download manager for long running downloads
  • Improved power management and application control
  • Native support for multiple cameras
  • Switched from YAFFS to the ext4 filesystem
  • An Integrated task Manager
Alongside the new platform, Google is also releasing updates to the Software Development Kit (SDK) tools (r8), Native Development Kit (NDK) and Android Development Tools (ADT) plug-in for Eclipse (8.0.0).
    The new features are simplified debug builds, integrated ProGaurd support, HierarchyViewer improvements and a preview of new UI Builder.  For a few of the reviews you can go here:

    Friday, December 3, 2010

    Android UI – Inflate from XML (Dynamic UI Creation)


    We have seen that we can declare User Interface in Android through XML or we can even create the UI Programmatically. Now, we will see how we can mix the two and use it for building dynamic User Interfaces. One example of such a case would be when on a particular action of the user on one of the UI elements, you need more UI elements to appear on the same screen. How do we achieve this?
    You can do it in two ways:
    1.       The dynamic part of the UI can be created programmatically. However we saw in my earlier tutorial that it is not a very good way to mix UI and code.  So, we can
    2.       Define the dynamic UI too as an XML and use XML inflation to include it into the existing UI.
    We will see how to do the 2ndway, which probably is a good practice too.
    As always, again a very simple example. Assume I have a very simple linear layout. In that I want to include a button. I can do it as part of the mail XML itself. However, assume that this button is supposed to be reused in many activities and hence I have defined it as a separate XML. How do I include it into the main XML?
    So, here is the main.xml
    <?xml version="1.0"encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/layout1"
        >
    </LinearLayout>
    Here is the buttons.xml that is also created in the res/layout folder:
    <?xml version="1.0"encoding="utf-8"?>

    <Button xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/button_small_left"
     style="?android:attr/buttonStyleSmall"
            android:text="Press to close"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    And here is the Activity’s onCreate(…) method of the InflateView class:
        public voidonCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            final LayoutInflater  inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            Button b = (Button)inflater.inflate(R.layout.buttons,
                    null);
           
            lLayout = (LinearLayout)findViewById(R.id.layout1);
            lLayout.addView(b);
    First 3 lines must be familiar. In the 4thline, I am getting a handle to the LayoutInflater through the getSystemService(…) method.  This inflater has a method inflate to which I pass the buttons.xml by passing the parameter R.layout.buttons. Then, I try to append this button to the Linear Layout that already exists and is set as the view in line 2 setContentView(R.layout.main). How to append? I get a handle to the LinearLayoutlLayout and add the new button to it in the last line!
    That simple to inflate an XML and append it to an existing view!
    However, I have gone ahead and added another bit to this program as shown below:
            b.setOnClickListener(new OnClickListener() {
               
                public void onClick(View v) {
                      //restrict to adding only 1 textview child element
                      if (lLayout.getChildAt(2) == null)
                      {
                      TextView tv = (TextView)inflater.inflate(R.layout.text, null);
                      lLayout.addView(tv);
                      }
                }
            });
    On the click of this dynamically added button, I am showing how we can add more to the UI dynamically through inflation. Assume, on the click of the button, you want to show some new text. This TextView is defined in another XML called text.xml which is also in the res/layout folder.
    So, I am inflating from this XML and appending it to the LinearLayout view. So, a lot can be achieved for dynamic UI through inflation.

    You can download the complete sample code here.

    Thursday, December 2, 2010

    Creating Android UI Programmatically


    So far, in all my examples, I have been using the declarative way of creating an Android UI using XML. However, there could arise certain situations when you may have to create UI programmatically. Sincere advice would be to avoid such a design since android has a wonderful architecture where the UI and the program are well separated. However, for those few exceptional cases where we may need too… here is how we do it.
    Every single view or viewgroupelement has an equivalent java class in the SDK. The structure and naming of the classes and methods is very similar to the XML vocabulary that we are used to so far.
    Let us start with a LinearLayout. How would we declare it in an XML?
    <?xml version="1.0"encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    <TextView 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello"
        />
    </LinearLayout>
    This just contains a TextViewembedded in a LinearLayout. A very trivial example. But serves the purpose intended. Let me show how almost every single element here corresponds to a class or a method call in the class.  So the equivalent code in the onCreate(…)  method of an activity would be like this:
             super.onCreate(savedInstanceState);
          
            lLayout = newLinearLayout(this);
            lLayout.setOrientation(LinearLayout.VERTICAL);
            //-1(LayoutParams.MATCH_PARENT) is fill_parent or match_parent since API level 8
            //-2(LayoutParams.WRAP_CONTENT) is wrap_content
            lLayout.setLayoutParams(new LayoutParams(
    LayoutParams.MATCH_PARENT,
    LayoutParams.MATCH_PARENT));
            tView = newTextView(this);
            tView.setText("Hello, This is a view created programmatically! " +
                      "You CANNOT change me that easily :-)");
            tView.setLayoutParams(new LayoutParams(
    LayoutParams.MATCH_PARENT,
    LayoutParams.WRAP_CONTENT));
            lLayout.addView(tView);
            setContentView(lLayout);

    Like this any layout view can be created. But from this small example you can notice two outstanding things – very tedious to code for every attribute of the view. And any simple change in the view, you need to change the code, compile, deploy and only then you see the effect of the change – unlike in a layout editor. 


    You can download the sample code here.

    Wednesday, December 1, 2010

    Android Eclipse link Error - New Project

    I set up a new environment on my new laptop with Windows7 and jdk1.6.0_21 version. Did the initial setup with eclipse installation, android SDK installation, installing the ADT plugin on eclipse etc. I then imported all the android projects I had created so far. It worked perfectly fine.
    Next I created a simple project without any custom stuff, it failed to create with a link error as shown in the image below:

    After much trial and error, setting up everything afresh, changing or creating a new workspace, nothing seemed to work. I noticed that the Android package was not visible in the Java build path that you get to see in the project properties. So, finally I found a manual workaround to overcome this problem if you mandatorily want to continue working in the same workspace
    Solution: Same workspace:
    The manual resolution I found is to make a classpath entry in the .classpath file outside the eclipse environment.
    The .classpath file may have such an entry before you edit it:
    <?xml version="1.0" encoding="UTF-8"?>
    <classpath>
         <classpathentry kind="src" path="src"/>
         <classpathentry kind="src" path="gen"/>
         <classpathentry kind="output" path="bin"/>
    </classpath>

    So add an entry for the android framework to be included as shown below:
    <?xml version="1.0" encoding="UTF-8"?>
    <classpath>
         <classpathentry kind="src" path="src"/>
         <classpathentry kind="src" path="gen"/>
         <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
         <classpathentry kind="output" path="bin"/>
    </classpath>

    What actually corrupted my workspace, i have not yet figured out. However, while searching on the web for all possible solutions, I came across the announcement on the eclipse forums that Eclipse 3.3 to 3.6 on windows platform is not stable with the JDK version -  jdk1.6.0_21. Hence we need to either roll back to patch 20 or upgrade to 22. I have upgraded and see that eclipse is far more stable now.
    Please see this link for more details on the windows and jdk problem mentioned above:
    Solution: Different or new workspace:
    Just upgrade your JDK to jdk1.6.0_22 and point eclipse to use this as the default JDK. Create a new workspace and you are done. It fixes the problem.
    Hope this helps many not to waste time on searching a solution that is not to do with the way you are coding but with the environment set up itself. I had to spend quite a bit of my precious time before figuring this out. 

    Sunday, September 19, 2010

    Sample Code Download Link

    Hi,

    I got a lot of requests for alternate download sites (for the Sample Code). So, I have put all the sample code into one page and here is the link to the same. Hope this helps you.

    https://sites.google.com/site/saigeethamn/home/android-tutorial-code-for-download

    Tuesday, July 13, 2010

    Google debuts DIY code tools for Android phones

    BBC News - Google debuts DIY code tools for Android phones

    This seems to be very interesting stuff... though at the outset it may seem a dampener for hard core techies who take joy in cracking tough nuts by themselves, I am sure these DIY code tools can certainly help the techies too to innovate and re-discover themselves in very new avatars... Need to check what exactly this has to offer. :)

    Google launches Android 2.2 SDK

    Google launches Android 2.2 SDK - V3.co.uk - formerly vnunet.com

    Hmm... a new version of the SDk is out! The article above highlights one of the features - the ability to move applications to SD Card thus giving more space for mote applications to be accommodated on an Android mobile.
    This is a minor release and yet there are quite a few noteworthy features, some of them listed below:
    1. Multiple keyboard languages - a user can switch between languages by swiping across the spacebar
    2. The android mobile can be used as a protable Wi-Fi hotspot from which 8 devices can connect.
    3. The camera and gallery have been enhanced with a new UI for controlling zoom, focus, flash, exposure etc.
    4. Some of the new platform technologies introduced are a new media framework - Stagefright and bluetooth enhancements
    5. For the developers. there are some new APIs introduced in Apps on external storage, Media framework, Camera and camcorder, graphics, data backup, device policy manager and UI framework.

    For more details on the above, read the article: Android 2.2 Platform Highlights