İş Tecrubesi
Eğitim Geçmişi
Dil Becerileri
Son Forum Aktiviteleri
15Android Navigation Drawer Icon Problemi
activity_main_drawer.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="all">
<item
android:id="@+id/nav_login"
android:icon="@drawable/login"
android:layout_centerVertical="true"
android:title="Giriş Yap"/>
<item
android:id="@+id/nav_gallery"
android:icon="@drawable/ic_menu_gallery"
android:title="Gallery"/>
<item
android:id="@+id/nav_slideshow"
android:icon="@drawable/ic_menu_slideshow"
android:title="Slideshow"/>
<item
android:id="@+id/nav_manage"
android:icon="@drawable/ic_menu_manage"
android:title="Tools"/>
</group>
<item android:title="Communicate">
<menu>
<item
android:id="@+id/nav_share"
android:icon="@drawable/buttona"
android:title="Share"/>
<item
android:id="@+id/nav_send"
android:icon="@drawable/ic_menu_send"
android:title="Send"/>
</menu>
</item>
</menu>
Ek'te verdiğim gibi resim neden görünmüyor login iconu ?
Android Düzeni Hakkında Region Mantığı
Örneğin C# da şöyleydi.
#region dosyalar sistemi
~~~~~~~~~~
~~~~~~~~~~ Kodlar
~~~~~~~~~~
#endregion
böyle yapınca küçültüp açabiliyoduk. Bir method daki gibi küçültüp kodların görünmemesi gibi birşey.
ama bu method değil isim tanımlıyorsun başlıklar yani küçültüp aşağı yukarı yapmamak için.
Eclipse yada Android Studio da böyle bir kod mevcutmu acaba yada buna benzer birşey bilen bilgi olarak yorum atabilirsiniz.
Android Uzak veritabanı bağlantısı
Öncelikle diğer konuda eskiden yazdığım fonk.java vardı belki işine yarar diye koyayım linki buraya.
https://gelecegiyazanlar.turkcell.com.tr/soru/uzak-veritabani-ile-calisma
Şuan o eski koda göre yeni şeyler keşvettim ve Türkçe kaynak olmadığı için burayada belirmek istiyorum.
Burada Hem yazı göndermeyi gösteriyorum hemde base64 olarak resim göndermeyi gösteriyorum.
fonkisyonlar verdiğim linkte var. gerekirse ordan alırsınız.
String ercnt= "";
Bitmap bmpGrnm;
String imgbase64 = "";
private JSONObject post(String data[], String dataName[]){
try{
String postUrl = "http://www.siteAdı.com/mobil/query/msjgndr.php";
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 100000);
HttpConnectionParams.setSoTimeout(httpParameters, 100000);
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(postUrl);
httpPost.setParams(httpParameters);
List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
urlParameters.add(new BasicNameValuePair(dataName[1], data[1])); // diziye mesaj adlı mesaj verisini koyuyor. Yani burda mesaj bizim php dosyasından $_POST["mesaj"] olarak çekiceğimiz bilgi oluyor.
// Örnek urlParameters.add(new BasicNameValuePair("mesaj", "blablalba"));
imgbase64 = "";
bmpGrnm = ((BitmapDrawable) imgpreview.getDrawable()).getBitmap(); // resim bitmap dönüştürülüyor
if (bmpGrnm != null)
imgbase64 = Base64.encodeToString(fnk.getBytesFromBitmap(bmpGrnm), Base64.DEFAULT); // Resmin Base64string alınıyor.
urlParameters.add(new BasicNameValuePair("resim", imgbase64)); // Resmin base64 string i gönderilmek üzere diziye ekleniyor.
httpPost.setEntity(new UrlEncodedFormEntity(urlParameters)); // bilgiler httpPost aktarılıyor
// execute HTTP post request
HttpResponse response = httpClient.execute(httpPost); // php dosyasına bilgiler post ediliyor.
HttpEntity resEntity = response.getEntity(); // gelen bilgi alınıyor
if (resEntity != null) {
String responseData = EntityUtils.toString(resEntity).trim(); // gelen bilgi okunuyor.
return new JSONObject(responseData); // jsonobject atılıp geri bilgiyi jsonobject olarak geri dönderiyor.
}
} catch (NullPointerException e) {
e.printStackTrace();
ercnt = e.toString();
return null;
} catch (Exception e) {
e.printStackTrace();
ercnt = e.toString();
return null;
}
return null;
}
public class PostDataAsyncTask extends AsyncTask<String, String, String> {
protected void onPreExecute() {
super.onPreExecute();
}
String snc;
String msg;
JSONObject json;
@Override
protected String doInBackground(String... strings) {
String[] dataName = null;
if (strings[0].equals("strimg")) { //buradaki protokol iğer yapıcağımız postları ayırmak için kullanılmıştır. Protokol olmak zorundadır. İsterseniz kendinize farklı bir kontrolde oluştrabilirsiniz ben böyle yaptım.
dataName = new String[]{"protokol", "mesaj"};
}
json = post(strings, dataName); // strings gönderilecek bilgiler dataName php de alınacak bilgiler
if(json != null) {
try {
if (strings[0].equals("strimg")) { // En iyi kontrol yapısı oluşturma.
snc = json.getString("sonuc");
msg = json.getString("sonucmesaji");
} else
return "seçim yok.";
return strings[0]; // kontrol edilecek değer.
} catch (NullPointerException e) {
e.printStackTrace();
ercnt = e.toString();
} catch (Exception e) {
e.printStackTrace();
ercnt = e.toString();
}
return "try json error";
}
else
return "null";
}
@Override
protected void onPostExecute(String cvp) {
if(cvp.equals("seçim yok"))
fnk.msgFragmentBox("Durum","Seçim Yanlış.","","","Tamam");
else if(cvp.equals("try json error"))
fnk.msgFragmentBox("Durum","try json error:\n"+ ercnt,"","","Tamam");
else if(cvp.equals("null"))
fnk.msgFragmentBox("Durum","Null:\n"+ ercnt,"","","Tamam");
else if(cvp.equals("strimg"))
{
if (snc.equals("yes")) {
// başarıyla mesaj gönderildi
} else {
// mesaj gönderilirken hata oluştu msg değişkeni hata mesajını verir
}
}
}
}
Kullanımı.
String[] data = {"strimg", "İlk Mesajım"};
new PostDataAsyncTask().execute(data);
PHP Dosyası
<?php
include "../ayarlar.php";
$msj = $_POST["mesaj"];
$rsm = $_POST["resim"];
if($msj != "" && $rsm != "")
{
$query = $db->prepare("INSERT INTO mesajlar SET
mesaj = ?, resim = ?");
$insert = $query->execute(array(
$msj, $rsm
));
if ( $insert ){ // mesaj başarıyla eklendi.
$cevap = array('sonuc' => "yes", 'sonucmesaji' => "Başarıyla Mesaj Gönderildi.");
}
else
$cevap = array('sonuc' => "no", 'sonucmesaji' => "Mesaj eklenirken hata");
}
else
$cevap = array('sonuc' => "no", 'sonucmesaji' => "Gerekli Yerleri Doldurunuz.");
echo json_encode($cevap);
?>
Android Slider Menu
Kaynak olsun diye yazıyorum:
Görünüm:
İndirme Linki:
http://www.mediafire.com/download/k5c4ec4x61fn2k8/Sorumatik3_Slidemenu.zip
Android Navigation Drawer Icon Problemi
Android navigation drawer da icon yok sadece renk var yani onlar icon değil.
Belirli objects(nesneler) için kodları ve sadece renkli yapılabiliyor.
Benim istediğim slider menü iconlu olduğu için. Bu olmaz.
Bunu yapmanın yoluda.
https://www.mobilhanem.com/android-navigation-drawer-ile-slider-menu-yapimi/
yada
http://kod5.org/android-navigation-drawer-ile-slide-menu-2/
Hazır yapılmış verilmiş. İndirip değiştireceksin okadar.
Örnek ben yaptım
Görünüm:
İndirme Linki :
http://www.mediafire.com/download/k5c4ec4x61fn2k8/Sorumatik3_Slidemenu.zip
Benzer konuda.
"https://gelecegiyazanlar.turkcell.com.tr/soru/android-slider-menu"
Android Sürüm Kodu
Android Studio için:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xxxxx.xxxxx.xxxxx"
android:versionCode="2"
android:versionName="1.2"
>
version code ve version name yi +1 şeklinde arttıralım.
birde
build.grandle kısmından
defaultConfig {
applicationId "com.xxxxx.xxxxx.xxxxx"
minSdkVersion 17
targetSdkVersion 23
versionCode 2
versionName "1.2"
}
aynı şekilde version code 2
version name aynı manifest teki gibi yapalım.
sonra release edip apk mızı atabiliriz.
Harita Üzerinde Yol Çizmek
Gülşah çok güzel anlatmışsın ya :D
Herneyse gelelim konumuza..
Google maps v2 üzerinde harita çizmek nasıl olur. Aradan baya zaman geçmiş ama bende şuan 8 ay 4 hafta diyor
internette çok fazla türkçe kaynak yok daha doğrusu yeni yok. bende stackover üzerinden genelde gittiğim için sizlere anlatıcağım birde kaynakları belirteceğim.
ben fonksiyon üzerinden yaptım çünkü kod kalabalığı oluyor.
Bir class oluşturalım adı rota.class içerisine verdiğim kodları yapıştırın.
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Color;
import android.os.AsyncTask;
import android.util.Log;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Polyline;
import com.google.android.gms.maps.model.PolylineOptions;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
/**
* Created by ProgrammerDky on 11.02.2016.
*/
public class rota {
private Context cnt;
public rota(Context c)
{
this.cnt = c;
}
public String makeURL (double sourcelat, double sourcelog, double destlat, double destlog){
StringBuilder urlString = new StringBuilder();
/*
if(mode == null)
mode = "driving";*/
urlString.append("http://maps.googleapis.com/maps/api/directions/json");
urlString.append("?origin=");// from
urlString.append(Double.toString(sourcelat));
urlString.append(",");
urlString
.append(Double.toString( sourcelog));
urlString.append("&destination=");// to
urlString
.append(Double.toString( destlat));
urlString.append(",");
urlString.append(Double.toString( destlog));
urlString.append("&sensor=false&mode=driving&alternatives=true&language=tr");
return urlString.toString();
}
public static class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
public String getJSONFromUrl(String url) {
// Making HTTP request
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
json = sb.toString();
is.close();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
return json;
}
}
public void drawPath(String result) {
try {
//Tranform the string into a json object
final JSONObject json = new JSONObject(result);
JSONArray routeArray = json.getJSONArray("routes");
JSONObject routes = routeArray.getJSONObject(0);
JSONObject overviewPolylines = routes.getJSONObject("overview_polyline");
String encodedString = overviewPolylines.getString("points");
List<LatLng> list = decodePoly(encodedString);
Polyline line = harita.googleHarita.addPolyline(new PolylineOptions()
.addAll(list) // tüm listeyi tek seferde ekleme.
.width(12)
.color(Color.parseColor("#05b1fb"))//Google maps blue color
.geodesic(true)
);
/* tek tek ekler ama gerek yok.
for(int z = 0; z<list.size()-1;z++){
LatLng src= list.get(z);
LatLng dest= list.get(z+1);
Polyline line = mMap.addPolyline(new PolylineOptions()
.add(new LatLng(src.latitude, src.longitude), new LatLng(dest.latitude, dest.longitude))
.width(2)
.color(Color.BLUE).geodesic(true));
}
*/
}
catch (JSONException e) {
}
}
public List<LatLng> decodePoly(String encoded) {
List<LatLng> poly = new ArrayList<LatLng>();
int index = 0, len = encoded.length();
int lat = 0, lng = 0;
while (index < len) {
int b, shift = 0, result = 0;
do {
b = encoded.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
lat += dlat;
shift = 0;
result = 0;
do {
b = encoded.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
lng += dlng;
LatLng p = new LatLng( (((double) lat / 1E5)),
(((double) lng / 1E5) ));
poly.add(p);
}
return poly;
}
public class rotaCizAsyncTask extends AsyncTask<Void, Void, String> {
private ProgressDialog progressDialog;
String url;
rotaCizAsyncTask(String urlPass){
url = urlPass;
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
progressDialog = new ProgressDialog(cnt);
progressDialog.setMessage("Rota hesaplanıyor lütfen bekleyiniz...");
progressDialog.setIndeterminate(true);
progressDialog.show();
}
@Override
protected String doInBackground(Void... params) {
JSONParser jParser = new JSONParser();
String json = jParser.getJSONFromUrl(url);
return json;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
progressDialog.hide();
if(result!=null){
drawPath(result);
}
}
}
}
Classta tek bi yerde değişiklik yapıcaksınız.
harita.googleHarita Yazan kısımda harita benim activity class mın adı yani orayada hangi activityde göstermek istiyorsanız o class ın adını yazıcaksınız.
bu sayede aşağıda göstermiş oldugum kullanımda static GoogleMaps googleHarita dan anlarsanız sınız ztn.
Evet şimdik örnek kullanım kodlarını vericeğim.
// global olarak ekleyelim static olma sebebi class üzerinden haritaya değişiklik verdiğimiz içindir.
static GoogleMap googleHarita;
rota rt = new rota(this); // global olarak tanımlayın
// ONCREATE kısmında google haritamızı harita ayarlarını v.s şeylerini yapalım
// bunları ekstra olarak koyuyorum birilerinin işine yarar diye
googleHarita = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.haritafragment)).getMap();
googleHarita.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
}
googleHarita.getUiSettings().setZoomControlsEnabled(true);
googleHarita.getUiSettings().setZoomGesturesEnabled(true);
googleHarita.setMyLocationEnabled(true);
googleHarita.getUiSettings().setMyLocationButtonEnabled(true);
googleHarita.getUiSettings().setMapToolbarEnabled(false);
googleHarita.getUiSettings().setMyLocationButtonEnabled(true);
googleHarita.setTrafficEnabled(true);
googleHarita.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(41.01, 28.58), 8));
//////////////////////////////////////////////////////////////
// ÖRNEK bir button eventinin içine yazdığınızı varsayıyorum.
locationManager = (LocationManager)getSystemService(LOCATION_SERVICE); // gps ve internet kontrolü için gerekli. kendi konumuzun servisini kullanmamız gerekiyor.
boolean isGPSEnabled = locationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER); // gps durumu kontrolü
// getting network status
boolean isNetworkEnabled = locationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER); // internet durumu kontrolü
if (isGPSEnabled && isNetworkEnabled) { // 2 side açık ise girecek.
Location lc =googleHarita.getMyLocation(); // google maps üzerinden kendi konumunu alma.
if(lc != null) {
double lat = lc.getLatitude(); // enlem
double lng = lc.getLongitude(); // boylam
googleHarita.clear(); // önceden oluşturulmuş markerleri temizlemek için.
googleHarita.addMarker(new MarkerOptions().position(new LatLng(lat, lng)).title("Ben")); // bulundugum yeri işaretliyorum yani marker koyuyoruz.
googleHarita.addMarker(new MarkerOptions().position(new LatLng(gidilecekEnlem,gidilecekBoylam).title("Gideceğim Yer")); // gideceğim yeri işaretliyorum yani marker koyuyoruz.
String url = rt.makeURL(lat, lng, gidilecekEnlem, gidilecekBoylam); // googleden rota bilgilerini almak için url oluşturuyoruz.
// örnek test yapmak istiyorsanız.
//http://maps.googleapis.com/maps/api/directions/json?origin=40.90%2C29.90&destination=40.85%2C29.80&sensor=false&mode=driving&alternatives=true&language=tr
// tarayıcıya yapıştırın örnek gidişatın kodlarını görün.
rt.new rotaCizAsyncTask(url).execute(); // bu kısım rota class kısmı url gönderiyoruz ve rotamız oluşturulucak.
googleHarita.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lng), 8)); // kamerayı bulunduğumuz yere getiriyoruz.
}
else
Toast.makeText(getApplicationContext(), "Seni bulamadık lütfen tekrar dene.", Toast.LENGTH_SHORT).show();
}
else
Toast.makeText(getApplicationContext(), "GPS kapalı", Toast.LENGTH_SHORT).show();
Kullandıgım kaynaklar:
Daha çok var ama sağlam olanları bunlar.
http://stackoverflow.com/questions/14702621/answer-draw-path-between-two-points-using-google-maps-android-api-v2
https://github.com/tato469/Android/blob/master/routes%20googleMaps%20v2/Route.java