2011-11-17 4 views
1

입력 된 매개 변수를 기반으로 PopupWindow를 생성하는 클래스를 만들었습니다. 내 PopupWindow에 대한 XML 기반 콘텐츠를 조작하는 것보다 내 필요에 더 잘 맞을 것이라고 생각합니다.비 XML PopupWindow를 Android의 화면에 표시하는 방법

창 만들기 및 내용이 원활하게 처리되는 것처럼 보입니다. 실제로 관리 할 수 ​​없었던 내용이 실제로 화면에 표시됩니다. 문제는 내가 LayoutInflater 함수에 의존하지 않는 PopupWindow 코드를 화면에 배치하는 예제를 찾을 수 없었다는 것입니다. 내 PopupWindow는 XML 파일에서 생성되지 않기 때문에 LayoutInflater를 사용하여 화면에 배치 할 수 없습니다.

내가 설명해야 할 다른 것 중 하나는 내 PopupWindow 생성 클래스가 이라는 자체 파일입니다. 즉, 활동 파일의 하위 클래스가 아닙니다. 나는 내가 개발할 수있는 미래의 프로젝트에 사용자 정의 PopupWindow 클래스를 쉽게 복사 할 수 있도록이 방법을 사용했다.

여기 내 클래스의 기본 레이아웃입니다 :

class myPopup extends Object { 

    public myPopup(parameters){ 
     ViewGroup winBody; 
     // "winbBody" will be the content of the PopupWindow. 
     // Code that fills and adjusts "winBody" based on the parameters goes here. 

     int width = //Determined by parameters. 
     int height = //Determined by parematers. 
     PopupWindow pw = new PopupWindow(winBody, width, height, true); 
     //This is as far as I seem to get before getting stuck. 
    } 

} 

나는 내가 어떻게 든 PopupWindow 기능 "showAtLocation"을 사용하기로하고 있음을 수집,하지만 난이 사용하기로하고 매개 변수 불분명입니다. 누군가 내 팝업 창이 화면에 나타나게하는 방법을 알려주시겠습니까? 희망적으로 그것의 중심에. :)

+0

저는이 문제에 대해 정확히 알고 있습니다 만, Java에서 프로그래밍 방식으로 PopupWindow 레이아웃을 만들 수 있습니다. 이는 호출 할 때 윈도우가 동적 일 수 있음을 나타냅니다. –

+0

예, 다소 많습니다 위의 코드는 무엇을합니다. (이 질문에 전체 코드를 제공하지 않은 것은 꽤 길기 때문에 대부분 내 문제와 관련이 없습니다.) – Cambot

+0

popupWindow의 업데이트 방법은 어떻게 사용합니까? –

답변

0

은 당신이 활동으로 전체 팝업 창을 정의하고 단지 그 배경 사라지는 할 수

뭔가를 시도, 그래서 팝업 창이 다음과 같이 표시됩니다

<style name="MyTransparentPopup"> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:background">@android:color/transparent</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:windowNoTitle">true</item> 
</style> 

public class PopupWindowActivity extends Activity { 

    PopupWindow popUp; 
    LinearLayout layout; 
    TextView tv; 
    LayoutParams params; 
    LinearLayout mainLayout; 
    Button but; 
    boolean click = true; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     popUp = new PopupWindow(this); 
     layout = new LinearLayout(this); 
     mainLayout = new LinearLayout(this); 
     tv = new TextView(this); 
     but = new Button(this); 
     but.setText("Show popup"); 
     but.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       if (click) { 
        popUp.showAtLocation(mainLayout, Gravity.CENTER, 0, 0); 
        popUp.update(0, 0, 300, 80); 
        click = false; 
       } else { 
        popUp.dismiss(); 
        click = true; 
       } 
      } 

     }); 
     params = new LayoutParams(LayoutParams.WRAP_CONTENT, 
       LayoutParams.WRAP_CONTENT); 
     layout.setOrientation(LinearLayout.VERTICAL); 
     tv.setText("Hello popup"); 
     layout.addView(tv, params); 
     popUp.setContentView(layout); 

     mainLayout.addView(but, params); 
     setContentView(mainLayout); 
    } 
    } 
관련 문제