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
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);
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(); } }; }
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"
vrátí adresář SD karty
File extStore = Environment.getExternalStorageDirectory();
skryje fragment
FragmentTransaction tr = getSupportFragmentManager().beginTransaction(); tr.hide(layersFragment); tr.commit();
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; } } }
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); } };
převede dp na px
public int dp2px(float dp) { final float scale = getResources().getDisplayMetrics().density; return (int) (dp * scale + 0.5f); }
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);
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);
zobrazí debugovací výpis
import android.util.Log; Log.d("Tag", "zprava");
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; }
vytvoří přerušovanou čáru
Pint paint = new Paint(); paint.setPathEffect(new DashPathEffect(new float[] {10,20}, 0));
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]; } }; }
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);
nezůstává journal soubor
import android.database.sqlite.SQLiteDatabase; SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(fileDB, null); db.rawQuery("PRAGMA journal_mode=DELETE", null);
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(); } }; }
na krátko zobrazí ve spod obrazovky zprávu
import android.widget.Toast; Toast.makeText(this, R.string.testingError, Toast.LENGTH_LONG).show();