2013-06-06 2 views
1

У меня есть андроид приложение с картой в страны разделены на районы ... и в файле database.xml я поставил XY координаты позиции для каждого района на карте .. .Я хочу, чтобы обнаружить разрешение экрана

Но, когда я запустить приложение на устройстве с другим размером экрана, изменить позиции и не соответствовали позиции, что мне нужно!

Так, пожалуйста, я хочу знать, как определить размер экрана, и создать отдельную базу данных XY для каждого разрешения экрана!

Спасибо заранее,


вот MainActivity.java код, если вы хотите что-нибудь еще я отправлю его, пожалуйста, мне нужна ваша помощь! :(

private final Context appContext = MainActivity.this; 
RelativeLayout relativeLayoutMap; 
ProgressDialog xyProgressDialog; 
Dialog dialog; 
Spinner spinner; 
MediaPlayer mediaPlayer; 
static String extStorageDirectory = Environment 
     .getExternalStorageDirectory().toString(); 
final static String TARGET_BASE_PATH = extStorageDirectory + "/"; 

@SuppressLint("NewApi") 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    relativeLayoutMap = (RelativeLayout) findViewById(R.id.mapContainer); 
    checklanguage(); 
    clickRadioButton(); 
    playMusicOnCoordinatesClick(); 
    new saveFoldertoSDCard().execute("MyApp"); 



    **//Display myDisplay = getWindowManager().getDefaultDisplay(); 
    //Point point = new Point(); 
    //myDisplay.getSize(point); 
    //int width = point.x; 
    //int height = point.y;** 
} 



@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 


public void clickRadioButton() { 
    RadioButton rdbtnEnglish = (RadioButton) findViewById(R.id.rdBtnEnglish); 
    if(rdbtnEnglish.isChecked()){ 
     saveLanguageSelection(true); 
    }else{ 
     saveLanguageSelection(false); 
    } 
    rdbtnEnglish.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, 
       boolean isChecked) { 
      // TODO Auto-generated method stub 
      saveLanguageSelection(isChecked); 
     } 
    }); 
} 


public void elabirate() { 
    int coordinates = Coordinates.sCoordinatesList.size(); 
    int i; 
    for (i = 0; i < coordinates; i++) { 

     final Button btnclick = new Button(appContext); 
     btnclick.setId(i); 
     RadioButton rdbtnEnglish = (RadioButton) findViewById(R.id.rdBtnEnglish); 
     if(rdbtnEnglish.isChecked()){ 
      btnclick.setText("" + Coordinates.sCoordinatesList.get(i).getName()); 
     }else{ 
      btnclick.setText("" + Coordinates.sCoordinatesList.get(i).getArabicCityName()); 
     } 
     btnclick.setBackgroundResource(R.drawable.round_button_selector); 

     btnclick.setTextColor(Color.CYAN); 

     LayoutParams lp = new LayoutParams(
       android.app.ActionBar.LayoutParams.WRAP_CONTENT, 
       android.app.ActionBar.LayoutParams.WRAP_CONTENT); 
     lp.topMargin = Coordinates.sCoordinatesList.get(i).getX(); 
     lp.leftMargin = Coordinates.sCoordinatesList.get(i).getY(); 

     relativeLayoutMap.addView(btnclick, lp); 


     btnclick.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Integer id = btnclick.getId(); 
       Intent intent = new Intent(); 
       intent.setClass(appContext, CityActivity.class); 
       intent.putExtra("btnid", id.toString()); 
       startActivity(intent); 
      } 
     }); 
    } 
} 



public void changeCoordinatesLanguage(View view){ 
    RadioButton rdbtnEnglish = (RadioButton) findViewById(R.id.rdBtnEnglish); 
    int coordinates = Coordinates.sCoordinatesList.size(); 
    int i; 
    for (i = 0; i < coordinates; i++) { 
     final Button btnCoordinates = (Button) findViewById(i); 
     if(rdbtnEnglish.isChecked()){ 
      btnCoordinates.setText("" + Coordinates.sCoordinatesList.get(i).getName()); 
      loadCityList(); 
     }else{ 
      btnCoordinates.setText("" + Coordinates.sCoordinatesList.get(i).getArabicCityName()); 
      loadCityList(); 
     } 
    } 
} 

public class GetCoordinates extends AsyncTask<String, Integer, Boolean> { 
    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     xyProgressDialog = new ProgressDialog(appContext); 
     xyProgressDialog.setMessage("Loading..."); 
     xyProgressDialog.setCancelable(false); 
     xyProgressDialog.show(); 
     super.onPreExecute(); 
    } 

    @Override 
    protected Boolean doInBackground(String... params) { 
     // TODO Auto-generated method stub 

     return Coordinates.getCity(); 
    } 

    @Override 
    protected void onPostExecute(Boolean result) { 
     // TODO Auto-generated method stub 
     try { 
      xyProgressDialog.dismiss(); 
      if (result) { 
       elabirate(); 
       loadCityList(); 
      } else { 
       Toast.makeText(appContext, "Unable to load City list", 
         Toast.LENGTH_SHORT).show(); 
      } 
     } catch (Exception e) { 
      // TODO: handle exception 
     } 
     super.onPostExecute(result); 
    } 
} 


public void loadImage(){ 
     dialog = new Dialog(appContext); 
     dialog.setContentView(R.layout.progress_dialog); 
     dialog.setTitle("Load Progress"); 
     dialog.show(); 
} 


public class saveFoldertoSDCard extends AsyncTask<String, Integer, Boolean> { 

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     dialog = new Dialog(appContext); 
      dialog.setContentView(R.layout.progress_dialog); 
      dialog.setTitle("My App"); 
      dialog.setCancelable(false); 
      dialog.show(); 

     super.onPreExecute(); 
    } 

    @Override 
    protected Boolean doInBackground(String... params) { 
     // TODO Auto-generated method stub 
     return copyFileOrDir(params[0]); 
    } 

    @Override 
    protected void onPostExecute(Boolean result) { 
     // TODO Auto-generated method stub 
     try { 
      //xyProgressDialog.dismiss(); 
      dialog.dismiss(); 
      if (result) { 

       String path = Environment.getExternalStorageDirectory() 
         .toString() 
         + "/MyApp/MyAppdata.xml"; 
       new GetCoordinates().execute(path); 
      } 
     } catch (Exception e) { 
      // TODO: handle exception 
     } 

     super.onPostExecute(result); 
    } 
} 

private Boolean copyFileOrDir(String path) { 
    AssetManager assetManager = this.getAssets(); 
    String assets[] = null; 
    try { 

     assets = assetManager.list(path); 
     if (assets.length == 0) { 
      copyFile(path); 
     } else { 
      String fullPath = TARGET_BASE_PATH + path; 
      Log.i("tag", "path=" + fullPath); 
      File dir = new File(fullPath); 
      if (!dir.exists()) 
       if (!dir.mkdirs()) 
        ; 
      Log.i("tag", "could not create dir " + fullPath); 
      for (int i = 0; i < assets.length; ++i) { 
       String p; 
       if (path.equals("")) 
        p = ""; 
       else 
        p = path + "/"; 

       copyFileOrDir(p + assets[i]); 
      } 
     } 
     return true; 
    } catch (IOException ex) { 
     return false; 
    } 
} 

private void copyFile(String filename) { 
    AssetManager assetManager = this.getAssets(); 
    InputStream in = null; 
    OutputStream out = null; 
    String newFileName = null; 
    try { 
     in = assetManager.open(filename); 
     if (filename.endsWith(".png")) // extension was added to avoid 
             // compression on APK file 
      newFileName = TARGET_BASE_PATH 
        + filename.substring(0, filename.length() - 4); 
     else 
      newFileName = TARGET_BASE_PATH + filename; 
     out = new FileOutputStream(newFileName); 

     byte[] buffer = new byte[1024]; 
     int read; 
     while ((read = in.read(buffer)) != -1) { 
      out.write(buffer, 0, read); 
     } 
     in.close(); 
     in = null; 
     out.flush(); 
     out.close(); 
     out = null; 
    } catch (Exception e) { 
    } 
} 


public void saveLanguageSelection(boolean value) { 
    SharedPreferences Shared_preferences = PreferenceManager 
      .getDefaultSharedPreferences(appContext); 
    SharedPreferences.Editor editor = Shared_preferences.edit(); 
    if (value) { 
     editor.putString("lang", "english"); 
    } else { 
     editor.putString("lang", "arabic"); 
    } 
    editor.commit(); 
} 

public void checklanguage() { 
    RadioButton rdbtnEnglish = (RadioButton) findViewById(R.id.rdBtnEnglish); 
    RadioButton rdbtnArabic = (RadioButton) findViewById(R.id.rdBtnArabic); 
    SharedPreferences Shared_preferences = PreferenceManager 
      .getDefaultSharedPreferences(appContext); 
    String txtlanguage = Shared_preferences.getString("lang", "null"); 
    if (txtlanguage != "null") { 
     if (txtlanguage.equals("english")) { 
      rdbtnEnglish.setChecked(true); 
      rdbtnArabic.setChecked(false); 
     } else { 
      rdbtnEnglish.setChecked(false); 
      rdbtnArabic.setChecked(true); 
     } 
    } else { 
     rdbtnEnglish.setChecked(true); 
     rdbtnArabic.setChecked(false); 
     saveLanguageSelection(true); 
    } 
} 


public void showWeather(View view) { 
    String url = "http://m.accuweather.com/"; 
    Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
    //parse: to check the availability of the url, ex: 123? 
    startActivity(browserIntent); 
} 


public void aboutApp(View view) { 
    openAboutDialog(); 
} 


@SuppressWarnings("deprecation") 
private void openAboutDialog() { 
    final AlertDialog alertDialog = new AlertDialog.Builder(
      MainActivity.this).create(); 
    alertDialog.setTitle("About"); 
    alertDialog.setMessage("MyApp"); 
    alertDialog.setIcon(R.drawable.ic_launcher); 
    alertDialog.setButton("OK", new DialogInterface.OnClickListener() { 

     public void onClick(DialogInterface dialog, int which) {  
      alertDialog.dismiss(); 
     } 
    }); 
    alertDialog.show(); 
} 

public void loadCityList(){ 
    Integer type=0; 
    RadioButton rdbtnEnglish = (RadioButton) findViewById(R.id.rdBtnEnglish); 
    if(rdbtnEnglish.isChecked()){ 
     type=0; 
    }else{ 
     type=1; 
    } 
    CityList.getAllCityList(type); 
    CityListAdapter cityAdapter = new CityListAdapter(appContext, CityList.sCityList); 
    spinner = (Spinner) findViewById(R.id.spinner1); 
    spinner.setAdapter(cityAdapter); 

    spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> arg0, View view, 
       int arg2, long arg3) { 
      // TODO Auto-generated method stub 
      if(arg2 > 0){ 
       TextView txtcityId = (TextView) view.findViewById(R.id.txtCityId); 
       TextView txtXyId = (TextView) view.findViewById(R.id.txtxyId); 
       Intent intent = new Intent(); 
       intent.setClass(appContext, CityImagesActivity.class); 
       intent.putExtra("xyid", txtXyId.getText().toString()); 
       intent.putExtra("cityid", txtcityId.getText().toString()); 
       startActivity(intent); 

      } 
     } 
     @Override 
     public void onNothingSelected(AdapterView<?> arg0) { 
      // TODO Auto-generated method stub 
     } 
    }); 
} 


public void playMusicOnCoordinatesClick() { 
    mediaPlayer = new MediaPlayer(); 
    mediaPlayer.reset(); 
    try { 
     AssetFileDescriptor afd = getAssets().openFd("Intro.mp3"); 
     mediaPlayer.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength()); 

    } catch (IllegalArgumentException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } catch (SecurityException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } catch (IllegalStateException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } catch (IOException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
    try { 
     mediaPlayer.prepare(); 
    } catch (IllegalStateException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    if (mediaPlayer.isPlaying()) { 
     mediaPlayer.stop(); 
    } 
    mediaPlayer.setVolume(100, 100); 
    mediaPlayer.start(); 
} 


public void calledSearch(View view){ 
    Intent intent = new Intent(); 
    intent.setClass(appContext, SearchActivity.class); 
    startActivity(intent); 
} 
+0

Это ужасно хакерское, непосильное решение вашей проблемы. Решение состоит в том, чтобы найти независимую от разрешения систему координат для хранения ваших позиций в округе. –

ответ

0

Вы можете использовать что-то вроде:.

Display myDisplay = getWindowManager().getDefaultDisplay(); 
Point point = new Point(); 
myDisplay.getSize(point); 
int width = point.x; 
int height = point.y; 

, как на this удивительный ответ

Если посмотреть на карте не на весь экран, то я предлагаю использовать проценты, чтобы установить размер карта. Таким образом, вы можете использовать процентное смещение с вашими координатами для облегчения различной проблемы с размером экрана. Вы определенно не хотите хранить разные наборы XML-координат для разных разрешений экрана.

+0

Большое спасибо «travega» за вашу помощь и ваш ответ .... , но этот код ничего не менял в dislpay моего приложения .. У меня все еще такая же проблема .... Должен ли я изменить что-нибудь еще, чтобы этот код изменился? –

+0

Можете ли вы показать некоторые из вас код? Метод, о котором я упоминал, проверен и проверен, было бы хорошо взглянуть на вашу реализацию ... Возможно, там что-то пошло наперекосяк. – travega

+0

Привет, Travega .... Извините, я был занят за последние 3 месяца, я работал ... Скажите, пожалуйста, какой код вы хотите мне написать здесь? Thanx In Advance –

Смежные вопросы