2016-04-04 4 views
0

Я создаю всплывающее окно, открывающееся в нижней части экрана при нажатии кнопки. Всплывающее окно правильно открывается в нижней части экрана размером 720 x 1280 пикселей (плотность пикселей ~ 294 точек на дюйм), но такая же, как и для экрана размером 480 х 854 пикселей (~ 196 пикселей на пиксель), она отображается в центре экрана. Как исправить это всплывающее окно проблемы для нескольких размеров экрана.Как исправить всплывающее окно для большого размера экрана в Android

Это мое всплывающее окно XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/popup_element" 
    android:layout_width="fill_parent" 
    android:layout_height="180dp" 
    android:background="@android:color/transparent" 
    android:orientation="vertical" 
    android:padding="3dp"> 


    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="1dp" 
     android:background="@android:color/transparent" 
     android:orientation="vertical"> 

     <TextView 
      android:id="@+id/Title" 
      android:layout_width="fill_parent" 
      android:layout_height="40dp" 
      android:layout_gravity="center_horizontal" 
      android:layout_weight="1" 
      android:background="@drawable/curve_shap" 
      android:gravity="center_horizontal|center_vertical" 
      android:text="Take Photo" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:textColor="@android:color/darker_gray" 
      android:textSize="14sp" /> 

     <Button 
      android:id="@+id/button_Camera" 
      android:layout_width="fill_parent" 
      android:layout_height="40dp" 

      android:layout_gravity="center_horizontal" 
      android:layout_weight="1" 
      android:background="@drawable/curve_shap" 
      android:text="Camera" 
      android:textColor="#3A86CF" /> 

     <Button 
      android:id="@+id/button_Gallery" 
      android:layout_width="fill_parent" 
      android:layout_height="40dp" 
      android:layout_gravity="center_horizontal" 
      android:layout_weight="1" 
      android:background="@drawable/curve_shap" 
      android:text="Gallery" 
      android:textColor="#3A86CF" /> 


    </LinearLayout> 

    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="45dp" 
     android:layout_marginTop="4dp" 
     > 

     <Button 
      android:id="@+id/btnCancelCamera" 
      android:layout_width="fill_parent" 
      android:layout_height="40dp" 
      android:layout_gravity="center_horizontal" 

      android:background="@drawable/curve_shap" 
      android:text="Cancel" 
      android:textColor="#3A86CF" 
      android:textSize="16sp" 
      android:textStyle="bold" /> 
    </RelativeLayout> 


</LinearLayout> 

Это мой код всплывающего окна.

imgProfilePic.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       LayoutInflater layoutInflater = (LayoutInflater) getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE); 
       View popupView = layoutInflater.inflate(R.layout.camera_popup, (ViewGroup) findViewById(R.id.popup_element)); 
       popupWindow = new PopupWindow(popupView, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
       popupWindow.setWidth(720); 
       popupWindow.setHeight(350); 
       popupWindow.setFocusable(true); 
       popupWindow.showAtLocation(popupView, Gravity.BOTTOM, 0, 0); //87 
       popupWindow.setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 

       Button btnCamera = (Button) popupView.findViewById(R.id.button_Camera); 
       Button btnGallery = (Button) popupView.findViewById(R.id.button_Gallery); 
       Button btnDismiss = (Button) popupView.findViewById(R.id.btnCancelCamera); 

       btnCamera.setOnClickListener(new View.OnClickListener() 
       { 
        @Override 
        public void onClick(View v) 
        { 
         SimpleDateFormat s = new SimpleDateFormat("ddMMyyyyhhmmss"); 
         String picformat = "IMG_" + 0 + "_" + s.format(new Date()) + ".png"; 
         Log.e(" picformat ", " = " + picformat); 

         Intent i = new Intent(Filter_Screen.this , Image_Cropping.class); 
         startActivity(i); 

         Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
         String extr = Environment.getExternalStorageDirectory().toString() + File.separator + "classNKK_ProfilePic"; 
         File myPath = new File(extr, picformat); 
         cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(myPath)); 
         startActivityForResult(cameraIntent, CAMERA_REQUEST); 

         Log.e("Camera", " Open"); 
         String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath(); 
         String imageUserProfile_path = baseDir + "/classNKK_ProfilePic/" + picformat; 
         editor.putString("profile_picformat", imageUserProfile_path); 
         editor.commit(); 


         popupWindow.dismiss(); 


        } 
       }); 

       btnGallery.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
         startActivityForResult(galleryIntent, PROFILE_GALLERY); 
         Log.e("Gallery open", ""); 
        } 
       }); 

       btnDismiss.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         popupWindow.dismiss(); 
        } 
       }); 
      } 
     }); 

И я должен создать папку расположения для нескольких размеров экрана и я поместить файл XML всплывающее окна в этой папке.

  1. расположение
  2. макета ИПЧР
  3. макета MDPI

Благодаря передовой.

+0

Проверьте эту ссылку: http://stackoverflow.com/questions/32860815/how-to-define-dimens-xml-for-every-different-screen-size-in-android –

+0

Спасибо за ответ, можете ли вы объясните мне, как использовать приведенную ниже ссылку. – jandroid

ответ

0

Вы должны принять во внимание, что устройства имеют разные размеры экрана:

  • XLarge экраны, по меньшей мере 960dp х 720dp
  • большие экраны, по крайней мере 640dp х 480dp
  • нормальные экраны, по крайней мере 470dp х 320dp
  • небольшие экраны, по меньшей мере 426dp х 320dp

Таким образом, вместо размещения йо ur в layout-hdpi и layout-mdpi, я бы предложил создать dimens.xml для каждого размера экрана и извлечь ваши значения, связанные с размером.

Например, если вы хотите всплывающую высота будет 100dp для обычных экранов и 200dp для больших экранов создать следующие файлы:

разреша/ценности нормальных/dimens.xml

<resources> 
    <dimen name="popup_height">100dp</dimen> 
</resources> 

Рез/значения Расширенного/dimens.xml

<resources> 
    <dimen name="popup_height">200dp</dimen> 
</resources> 

и в макете использовать

android:layout_height="@dimen/popup_height" 

Дополнительная информация может быть найдена here.