Uživatelské nástroje

Nástroje pro tento web


navody:java_android

Java Android

Nastavení Eclipse

Přístup ke zdrojovým souborům SDK

pravým na projekt → cesta sestavení → Konfigurovat cestu sestavení… → Cesta sestavení Java → Knihovny → Android 4.1 → android.jar → připojení zdroje → Upravit… → External location → Path: <SDK adresář>/sources/android-16

Příklady

Aktivita

jednoduchá aktivita

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
 
public class OpenSaveActivity extends FragmentActivity
{    
    @Override
    public void onCreate(Bundle savedInstanceState)
    {       
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_open_save);
 
        Bundle b = getIntent().getExtras();
        String neco = b.getString("com.example.neco");
    }
}

spuštění aktivity

import android.content.Intent;
 
Intent i = new Intent(this, OpenSaveActivity.class);    
String neco = "neco";
i.putExtra("com.example.neco", neco);    
this.startActivity(i);

Dialogy

Dialog obsahující seznam položek

import cz.kalcik.vojta.terraingis.R;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
 
public class NewLayerDialog extends DialogFragment implements OnClickListener
{
    private String[] ITEMS;
 
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState)
    {
         Builder dialogBuilder = new AlertDialog.Builder(getActivity());
 
         ITEMS = new String[2];
         ITEMS[0] = getString(R.string.empty_layer);
         ITEMS[1] = getString(R.string.import_shapefile);
 
         dialogBuilder.setItems(ITEMS, this);
         dialogBuilder.setTitle(R.string.new_layer_message);
         return dialogBuilder.create();
    }
 
    @Override
    public void onClick(DialogInterface dialog, int which)
    {
 
    }
}

dialog s formálářem definovaným v XML

public class EmptyLayerDialog extends DialogFragment
{
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState)
    {
         Builder dialogBuilder = new AlertDialog.Builder(getActivity());
 
         LayoutInflater inflater = getActivity().getLayoutInflater();
         dialogBuilder.setView(inflater.inflate(R.layout.empty_layer_dialog, null));
 
         dialogBuilder.setPositiveButton(R.string.positive_button, null);
         dialogBuilder.setNegativeButton(R.string.negative_button, null);
 
         AlertDialog dialog = dialogBuilder.create();
         dialog.setOnShowListener(onShowListener);
 
         return dialog;
    }
 
    DialogInterface.OnShowListener onShowListener = new DialogInterface.OnShowListener()
    {
        @Override
        public void onShow(DialogInterface dialog)
        {
            Button okButton = ((AlertDialog) getDialog()).getButton(DialogInterface.BUTTON_POSITIVE);
            okButton.setOnClickListener(positiveHandler);
        }
    };
 
    View.OnClickListener positiveHandler = new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            EditText nameEditText = (EditText)getDialog().findViewById(R.id.edit_text_name);
            String name = nameEditText.getText().toString();
 
            Toast.makeText(getActivity(), R.string.name_error, Toast.LENGTH_LONG).show();
            getDialog().dismiss();        
        }        
    };
 
}

Canvas

Při velkém zoomu nastávala pro metodu canvas.drawPath(path, paint) chyba OpenGLRenderer: Shape path too large to be rendered into a texture. Řešením je vypnout hardwarovou akceleraci v AndroidManifest.xml přidáním následujícího atributu do application:

android:hardwareAccelerated="false"

Environment

vrátí adresář SD karty

File extStore = Environment.getExternalStorageDirectory();

Fragmenty

skryje fragment

FragmentTransaction tr = getSupportFragmentManager().beginTransaction();
tr.hide(layersFragment);
tr.commit();

GestureDetector

detekuje jednoduché kliknutí

public class MainActivity extends Activity
{
    private GestureDetector mGestureDetector;
 
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        mGestureDetector = new GestureDetector(this, new MySimpleOnGestureListener());
    }
 
    @Override
    public boolean onTouchEvent(MotionEvent event)
    {
        mGestureDetector.onTouchEvent(event);
 
        return true;
    }
 
    private class MySimpleOnGestureListener extends
        GestureDetector.SimpleOnGestureListener
    {
        @Override
        public boolean onSingleTapUp(MotionEvent event) 
        {
            // neco udelej
 
            return true;
        }        
    }
}

Intenty

Použije intent pro výběr souboru

private static int LOAD_REQUESTCODE = 0;
 
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
    if(requestCode == LOAD_REQUESTCODE)
    {
        if(resultCode == Activity.RESULT_OK)
        {
            String FilePath = data.getData().getPath();
            Log.d("TerrainGIS", FilePath);
        }            
    }
}
 
View.OnClickListener loadFileHandler = new View.OnClickListener()
{
    @Override
    public void onClick(View v)
    {
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType("file/*");
        startActivityForResult(intent, LOAD_REQUESTCODE);            
    }        
};

Jednotky

převede dp na px

public int dp2px(float dp)
{
    final float scale = getResources().getDisplayMetrics().density;
    return (int) (dp * scale + 0.5f);
}

Listener

vytvoří listener pro kliknutí na tlačítko

View.OnClickListener myHandler = new View.OnClickListener()
{
    @Override
    public void onClick(View v)
    {
        // nejaka cinnnost
    }
};
 
Button button = new Button(this);
button.setText("Text");
button.setOnClickListener(myHandler);

vytvoří listener pro kliknutí na polužku v ListView

AdapterView.OnItemClickListener myHandler = new AdapterView.OnItemClickListener()
{
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id)
    {
        TextView item =(TextView)parent.getChildAt(position);
        String itemText = item.getText().toString();
        // nejaka cinnnost   
    }
};
 
ListView listView = (ListView) findViewById(R.id.listView);
listView.setOnItemClickListener(myHandler);

ListView

vytvoří adaptér pro ListView

ListView listView = (ListView) findViewById(R.id.mylist);
String[] values = new String[] {"Pondělí", "Úterý", "Středa"};
 
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
  android.R.layout.simple_list_item_1, android.R.id.text1, values);
 
listView.setAdapter(adapter); 

Log

zobrazí debugovací výpis

import android.util.Log;
 
Log.d("Tag", "zprava");

Options

zpracuje kliknutí na položku v menu

@Override
public boolean onOptionsItemSelected(MenuItem item)
{
    int id = item.getItemId();
    if(item1.getItemId() == id)
    {
        // udelej neco
    }
    else if(item1.getItemId() == id)
    {
        // udelej neco jinyho
    }
 
    return true;
}

Paint

vytvoří přerušovanou čáru

Pint paint = new Paint();
paint.setPathEffect(new DashPathEffect(new float[] {10,20}, 0));

Parcelable

ukázka parcelable (serializovatelný objekt), který obsahuje seznam objektů stejného typu jako je sám

import java.util.ArrayList;
import java.util.List;
 
import cz.vutbr.fit.testmind.profile.TAMPNode;
 
import android.os.Parcel;
import android.os.Parcelable;
 
public class TestingParcelable implements Parcelable
{
    private String title;
    private String body;
    private List<TestingParcelable> childs;
 
    public TestingParcelable(TAMPNode node)
    {
        title = node.getTitle();
        body = node.getBody();
 
        List<TAMPNode> nodeChilds = node.getListOfChildNodes();
 
        childs = new ArrayList<TestingParcelable>();
 
        for(TAMPNode childNode: nodeChilds)
        {
            childs.add(new TestingParcelable(childNode));
        }
    }
 
    public TestingParcelable(Parcel in)
    {
        readFromParcel(in);
    }
 
    public int describeContents()
    {
        return 0;
    }
 
    // write your object's data to the passed-in Parcel
    public void writeToParcel(Parcel out, int flags)
    {
        out.writeString(title);
        out.writeString(body);
        out.writeList(childs);
    }
 
    private void readFromParcel(Parcel in)
    {   
        title = in.readString();
        body = in.readString();
        childs = new ArrayList<TestingParcelable>();
        in.readList(childs, TestingParcelable.class.getClassLoader());
    }
 
    // this is used to regenerate your object. All Parcelables must have a CREATOR that implements these two methods
    public static final Parcelable.Creator<TestingParcelable> CREATOR = new Parcelable.Creator<TestingParcelable>() {
        public TestingParcelable createFromParcel(Parcel in)
        {
            return new TestingParcelable(in);
        }
 
        public TestingParcelable[] newArray(int size)
        {
            return new TestingParcelable[size];
        }
    };
}

Resources

vytvoří drawable z resources

import android.content.Context;
import android.graphics.drawable.Drawable;
 
Drawable locationIcon = context.getResources().getDrawable(R.drawable.location);

vrátí string z resources (getString je metoda activity nebo fragmentu)

getString(R.string.my_string);

vrátí barvu z resources

int color = getResources().getColor(R.color.background_list);

SQLite

nezůstává journal soubor

import android.database.sqlite.SQLiteDatabase;
 
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(fileDB, null);
db.rawQuery("PRAGMA journal_mode=DELETE", null);

Timer

metoda runTimerActionBar skryje po pěti sekundách ActionBar

public class MainActivity extends FragmentActivity
{
    private Timer timer;
 
    private void runTimerActionBar()
    {
        if(timer != null)
        {
            timer.cancel();
            timer.purge();
        }
 
        timer = new Timer();
        timer.schedule(new HideActionBarTask(), 5000);
    }
 
    class HideActionBarTask extends TimerTask
    {
        private HideActionBarRunnable hideActionBarRunnable = new HideActionBarRunnable();
 
        public void run()
        {
            MainActivity.this.runOnUiThread(hideActionBarRunnable);
        }
     }
 
    class HideActionBarRunnable implements Runnable
    {
        public void run()
        {
            getActionBar().hide();
        }
    };
}

Toast

na krátko zobrazí ve spod obrazovky zprávu

import android.widget.Toast;
 
Toast.makeText(this, R.string.testingError, Toast.LENGTH_LONG).show();

View

vrátí instanci třídy tlačítka definovaného v XML

import android.widget.Button;
 
Button tlacitko = (Button)getActivity().findViewById(R.id.my_button);
navody/java_android.txt · Poslední úprava: 2013/03/19 00:28 autor: jules