2016-05-23 65 views
1

我有幾個菜單按鈕的主要活動。當用戶按下特定的按鈕時,我想打開一個新的activity,它也有一些按鈕,我需要處理它們的點擊。換句話說,我需要像正常活動一樣彈出窗口功能。
我在網上查找,發現了幾種實現此方法的方法,例如:只需自定義activity的大小,在清單中使用diaglog主題,將其用作fragment或使用Popup Window類。但是,因爲我是Android新手,我想要爲我的項目實現它的最佳方式。
有人可以幫助我實現這一目標嗎?在Android應用程序中實現彈出窗口的最佳方法

編輯: 這是xml文件,我想,在彈出的窗口中使用(對於我想要達到更好的解釋):

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center_horizontal" 
    android:orientation="vertical" 
    android:background="#0091cb" 
    android:padding="16dp"> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:paddingTop="@dimen/activity_horizontal_margin" 
     android:weightSum="3" 
     android:id="@+id/check"> 

     <Button 
      android:layout_width="85dp" 
      android:layout_height="85dp" 
      android:background="@drawable/circle" 
      android:drawableTop="@drawable/computer" 
      android:paddingTop="12dp" 
      android:layout_marginLeft="10dp" 
      android:text="button1" 
      android:textSize="10dp" 
      android:textColor="#fff" 
      android:layout_weight="1" 
      android:onClick="button1_OnClick"/> 

     <Button 
      android:layout_width="85dp" 
      android:layout_height="85dp" 
      android:background="@drawable/circle" 
      android:drawableTop="@drawable/electrical" 
      android:paddingTop="12dp" 
      android:layout_marginLeft="10dp" 
      android:text="button2" 
      android:textSize="10dp" 
      android:textColor="#fff" 
      android:layout_weight="1" 
      android:onClick="button2_OnClick"/> 

     <Button 
      android:layout_width="85dp" 
      android:layout_height="85dp" 
      android:background="@drawable/circle" 
      android:drawableTop="@drawable/hdtv" 
      android:paddingTop="12dp" 
      android:layout_marginLeft="10dp" 
      android:text="button3" 
      android:textSize="10dp" 
      android:textColor="#fff" 
      android:layout_weight="1" 
      android:onClick="button3_OnClick"/> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="@dimen/activity_horizontal_margin" 
     android:orientation="horizontal" 
     android:layout_below="@id/check" 
     android:paddingTop="10dp"> 

     <Button 
      android:layout_width="85dp" 
      android:layout_height="85dp" 
      android:background="@drawable/circle" 
      android:drawableTop="@drawable/bill" 
      android:paddingTop="12dp" 
      android:layout_marginLeft="10dp" 
      android:text="button4" 
      android:textSize="10dp" 
      android:textColor="#fff" 
      android:onClick="button4_OnClick"/> 

     <Button 
      android:layout_width="85dp" 
      android:layout_height="85dp" 
      android:layout_marginLeft="10dp" 
      android:background="@drawable/circle" 
      android:drawableTop="@drawable/water" 
      android:paddingTop="12dp" 
      android:text="button5" 
      android:textSize="10dp" 
      android:textColor="#fff" 
      android:onClick="button5_OnClick" /> 

     <Button 
      android:layout_width="85dp" 
      android:layout_height="85dp" 
      android:layout_marginLeft="10dp" 
      android:background="@drawable/circle" 
      android:drawableTop="@drawable/electrical" 
      android:paddingTop="12dp" 
      android:text="button6" 
      android:textSize="10dp" 
      android:textColor="#fff" 
      android:onClick="button6_OnClick" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="@dimen/activity_horizontal_margin" 
     android:orientation="horizontal"> 

     <Button 
      android:layout_width="85dp" 
      android:layout_height="85dp" 
      android:layout_marginLeft="10dp" 
      android:background="@drawable/circle" 
      android:drawableTop="@drawable/notepad" 
      android:paddingTop="7dp" 
      android:text="button7" 
      android:textSize="10dp" 
      android:textColor="#fff" 
      android:onClick="button7_OnClick" /> 
     </LinearLayout> 
</LinearLayout> 
+2

你可以看這裏https://developer.android.com/reference/android/widget/PupupWindow.html和研究stackoverflow – okarakose

+0

謝謝。從我做的研究中發現了這些方法:只是自定義活動的大小,在清單中使用diaglog主題,將其用作片段或使用彈出式窗口類。但我不知道什麼是我想要的最佳方式 –

+0

使用此方法打開彈出窗口。這種方法我用我的app.i希望你也喜歡。 –

回答

0

創建方法,其中u想開在你的活動中彈出windiw 像這樣,這裏p是一個特定的點(位置),你想要打開你的窗口。

final Point p = new Point(); 
    show_popup.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       showpopupwindows(Activity, p); 

      } 
     }); 

然後,

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 
    int location[] = new int[2]; 

    show_popup.getLocationOnScreen(location); 
    p.x = location[0]; 
    p.y = location[1]; 
} 

private void showpopupwindows(final Activity context, Point p) { 

    LinearLayout viewGroup = (LinearLayout) context 
      .findViewById(R.id.popup_menu); 

    LayoutInflater layoutInflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 


    Display display = context.getWindowManager().getDefaultDisplay(); 
    Point size = new Point(); 
    display.getSize(size); 

    int popupwidth = (size.x/2); 
    int popupheight =(size.y/2); 

    View layout = layoutInflater.inflate(R.layout.detail_pop, viewGroup); 

    final PopupWindow popup = new PopupWindow(context); 

    popup.setContentView(layout); 
    popup.setWidth(popupwidth); 
    popup.setHeight(popupheight); 
    popup.setFocusable(true); 
    popup.setAnimationStyle(R.style.WindowAnimation); 
    popup.setBackgroundDrawable(new ColorDrawable(
      android.graphics.Color.TRANSPARENT)); 

    popup.showAtLocation(layout, Gravity.NO_GRAVITY, popupwidth,popupheight); 

    detail_pop1 = (TextView) layout.findViewById(R.id.detail_pop1); 

    detail_pop1.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Toast.makeText(getContext(), "pop window is opened, Toast.LENGTH_SHORT).show(); 

     } 
    }); 
} 

detail_pop.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/popup_menu" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:background="@color/skyblue" 
    android:gravity="center" 
    android:orientation="vertical" 
    > 

    <TextView 
     android:id="@+id/detail_pop1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="10dp" 
     android:layout_weight="1" 
     android:drawableTop="@drawable/ic_launcher" 
     android:gravity="center" 
     android:text="P" 
     android:textSize="@dimen/font_24" /> 


</LinearLayout> 
+0

這裏在我的代碼我的佈局名稱是detail_pop,但你可以wright你的佈局名稱,也可以給所有的按鈕,然後定義,你可以定義,按鈕=(按鈕)layout.findViewById(R.id.Button);那麼無論你執行哪個按鈕,你都可以像我一樣做。 –

+0

什麼是這些對象:LinearLayout viewGroup =(LinearLayout)context .findViewById(R.id.popup_menu); LayoutInflater layoutInflater =(LayoutInflater)上下文 .getSystemService(Context.LAYOUT_INFLATER_SERVICE);和你傳遞的showPopUpWindow()空點,它在onWindowFocusChanged()中被inisialized。你能解釋一下它的工作原理嗎? –

+0

這裏popup_menu是一個主要的線性佈局的ID。所以你給你的主線性layout.initiallly我只是定義點,但在方法我描述point.plz的位置仔細看。我建議首先你實現整個method.then根據你的項目做一些改變。 –

0

取決於你的需要。
如果您只需要顯示'經典'彈出窗口(在輸入字段或小顏色選擇器中輸入時出錯) - 使用PopupWindow類。您可以使用my gist
如果您的信息更普遍(例如'沒有互聯網連接')或用戶應選擇是/否 - 使用對話框。有cool library
自定義大小的活動很少使用。也許在一些撥號應用程序。 因此選擇實施取決於您的需求。

+0

我需要的是像正常活動一樣處理它,現在顯示一條消息或警報。在我想要顯示的活動中,我彈出一個按鈕,我需要用它們的活動中的函數來處理它們的點擊事件 –

+0

@ A.T您可以使用以下任何方式在彈出式佈局中使用按鈕 – rocknow

相關問題