Tuesday, November 23, 2010

How to develop android using java code for beginner

Java хэлийг ашиглан android mobile application хийх тухай зөвлөгөө жишээ. Хаалтан дотор гэнэт англи монгол хольж бичсэн байвал давхар тайлбарлаж байна гээд ойлгоорой!

Аль editor байсан гэсэн (intellij, netbeans, eclipse) android хөгжүүлэхэд дараах файл, сангууд дээр түлхүү ажиллана.

  1. AndroidManifest.xml файлд програмын үндсэн тохиргоо байна.
  2. res санд програмын нөөцүүд (зураг, бэлдэц текст, layout - байршил) байрлана.
  3. src санд java кодууд (Activity and more) байна. 
Android mobile application ажиллахдаа:

AndroidManifest.xml файлаас тохиргоогоо уншиж эхэнд ажиллуулах үйл ажиллагаа (Activity) -г тохируулсаны дагуу нэртэй, харагдах тексттэй, icon файлтайгаар дуудаж ачааллана. Ачаалсан Activity нь өөртөө layout (хар үгээр байршуулагч конпонент) -г агуулдаг ба энэ нь Activity -д байрших элдэв (компонент, контрол, контент) -г агуулна. Layout тодор тодорхойлогдсон компонентууд утсан дээр чинь харагдана гэж төсөөлөх хэрэгтэй. Android app -ийн Кодын бүтцийг дараах зургаар төсөөлөн үзүүлье.

Activity дотор Layout (Жишээ нь LinearLayout - аль нэг чиглэлд шугаман байрлана хөндлөн, босоо ч юм уу)





Layout дотор Контролуудыг (EditText, Button, ListView, ImageView) нэмнэ. Мэдээж код нь new LinearLayout() гээд бичигдэнэ. Цаашаа нь layout.addView(button);

тэгээд button.addOnClickListener эсвэл Activity - н Override method (чадваруудыг ашиглана болно)







 Жишээ нь:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_CALL) {
            performDial();
            return true;
        } else if (keyCode == KeyEvent.KEYCODE_0) {
            performAbout();
            return true;
        }
        return false;
    }

 гэх мэтчилэн код бичиж болно. Энэ бол зөвхөн санаа юм.


 За одоо нэг жишээ жижигхэн програм дээр авч үзье. Сайн ажиглаарай!

Жишээ нь:
Жишээний хийх үйлдэл нь нэг Activity -аас нөгөө Activity -г дуудаж ажиллуулаад утгыг нь авах.


AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.sodonsolution.android">


    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".FirstAct" android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <activity android:name=".SecondAct" android:label="Request Here"/>
    </application>


</manifest>


Тохиргоотой байвал энэ xml файлд Android app маань 2 Activity -тай эхлэж ажиллахдаа src/PackageName/FirstAct.java файл ачааллах болно.


FirstAct.java

package com.company.android;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;

public class FirstAct extends Activity
{
    private static final int INPUT_REQUEST = 0;

    //Загвар класс ашиглан Event класс үүсгэж байна
    private class ButtonHandler implements View.OnClickListener
    {
        public void onClick(View v)
        {
            handleButtonClick();
        }
    }
   
    //Activity -г ачаалахад эхэлж дуудагддаг method ( чадвар )
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        // Шинэ компонент үүсгэж байна
        Button startAct = new Button(this);
        startAct.setText("Start Activity");

        // Шинэ компонент байршуулагч өөр дээрээ үүсгэж байна.
        LinearLayout layout = new LinearLayout(this);

        // Одоо үүсгэсэн Button компонентоо байршуулж байна
        layout.addView(startAct, new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.FILL_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT));

        // Компенентодоо Event өгч байна
        startAct.setOnClickListener(new ButtonHandler());

        // Үүсгэсэн байршилаа өөртөө өгч байна Activity маань.
        setContentView(layout);

        //Ингээд үр дүнд нь Button харагдах болно. Энэ нь xml тохиргоогоор биш кодоор үүсгэж байгаа жишээ юм. Энэ үгийг анхаар xml нөөцөөр бас үүсгэж болдог байх нь.
        //нэг setContentView(R.layout.main); иймэрхүү
    }

    private void handleButtonClick()
    {

          //Intent class SecondAct параметртай үүсгэж байна. Ө.Х SecondAct Activity -г дуудаж байна
          //startActivityForResult, startActivity method бол ер нь Activity -г ачаалдаг чадварууд юм.
          //startActivityForResult нь нэг ялгаа нь дуудаад буцах утгыг нь авахад зориулагдсан
          startActivityForResult(new Intent(this, SecondAct.class), INPUT_REQUEST);
    }
   
    //Доорхи method нь програмын цонх ажиллаж дуусаад ямар үйлдэл хийгдэснийг мэдрэх зорилготой. Жишээ нь 2 Activity хоорондоо мэдээлэл дамжуулах эсвэл ачаалсан Activity маань ажиллаж дуусахдаа ямар төлөвтэй болсон ( програмыг cancel д чихлаа гэдгийг мэдэж болно ) зэргийг мэдээлэх үүрэгтэй юм.
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == Activity.RESULT_CANCELED)
            Toast.makeText(this, "activity canceled", Toast.LENGTH_SHORT).show();
        else if (resultCode == Activity.RESULT_OK)
        {
            String input = data.getStringExtra("input");
            Toast.makeText(this, "input = " + input, Toast.LENGTH_SHORT).show();
        }
    }
}




SecondAct.java



package com.sodonsolution.android;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;

public class SecondAct extends Activity
{
    private EditText input = null;
    private Button okay = null;

    private class ButtonOkayHandler implements View.OnClickListener
    {
        public void onClick(View v)
        {
            handleOkayButton();
        }
    }

    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        // initializing the fields
        input = new EditText(this);
        input.setText("Enter text here ...");
        okay = new Button(this);
        okay.setText("Okay");

        // defining the layout in code instead of XML
        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);
        layout.addView(input, new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.FILL_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT));
        layout.addView(okay, new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.FILL_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT));

        // activating the button
        okay.setOnClickListener(new ButtonOkayHandler());

        // setting the view to our layout
        setContentView(layout);
    }

    private void handleOkayButton()
    {

        //Activity нь ихэвчлэн Intent буюу зорилго болсон нэг классаар хандаж ажилладаг. Энэ Intent класс д л элдэв өгөгдөл тэр битгий хэл Activity -г ч хүртэл өгч ачаалахад ашиглаж байгааг FirstAct.java аас олж хараарай!
        Intent data = new Intent();
        data.putExtra("input", input.getText().toString());

        //Activity маань буцах утгыг оноож байна
        setResult(Activity.RESULT_OK, data);




        //Activity -ийн ажиллагааг дуусгаж байна. Цонх хааж байна гэж ойлгож болно
        finish();
    }
}











Дээрхи жишээн дээр кодоор компонент үүсгэж ашиглаж байсан бол одоо бол XML тохиргооний файл ашиглан програмтай бүтээх тухай жаахан жишээ хэлье.




Android Project үүсгэсний дараа res гэсэн сан үүснэ. Түүнд layout, drawable, values or resource гэсэн дэд сангууд байна.
  1. layout санд байх xml файлууд нь бидний түрүүн кодоор хийгээд байсан компенентуудыг бэлдэх зорилготой юм. Нэг xml файл нь нэг Activity гэж ойлгож болно. Бүх байршилыг нь xml дээр нарийн зааж өгөөд дараа нь код дээрээ ашиглахдаа setContentView(R.layout.xmlFiletitle); гэж бичихэд компонентууд байрших болно. Нэгэнт xml ээр үүсчихсэн контролыг id attribute-аар нь объект болгон авч болно. Жишээ нь: Button mButton = (Button) findViewById(R.id.myButtonId0);      мөн жаахан нэмэн дэлгэрүүлээд mButton.setOnClickListener(new View.OnClickListener(){
                public void onClick(View view) {
                    String name = getIntent().getStringExtra("name");
                    getIntent().putExtra("name", "Hello, " + name);
                    setResult(Activity.RESULT_OK);
                }
            });
           Event өгч болно. Ингэж xml -ээр үүсгэсэн объектоо баяжуулна.
  2. drawable санд байгаа файлууд мөн л ижил хэрэгжинэ. Ер нь өөрийн дураар илүү олон санд файлуудаа байршуулж болно. Хандаж авахдаа харин R класс дотор үүссэн байгаа нэрээрээ хандаж авна. Нөөцийн санд байгаа файл болон утгууд нь R класс дотор ялгаатай нэрээр бүртгэгддэг гэдгийг сайн анхаараарай!
  3. values сан дотор байгаа тохиргоон дээр харж байгаад дуурай өөрийн хүссэнээр шинэ утга нэмж болно. Харин өөр газар ашиглагдаж байгаа утгыг устгавал мэдээж алдаа заана. Жишээ нь: values/strings.xml тохиргоо дотор <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="hello">Welcome, Guest!</string>
        <string name="app_name">news.mn</string>
        <string name="aboutus">Бидний тухай</string>
    </resources>

    гэж бичээд ашиглахдаа кодонд setText(R.string.aboutus); layout/*.xml файлд <TextView android:id="@+id/dateDisplay"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/hello"/>
    гэж android:text="@string/hello" гэх мэтчилэн ашиглаж болно.
Android -г java хэлэн дээр хөгжүүлэх их хялбар боллоо. Амжилт хүсье

No comments: