Как заставить всплывающее окно не в формате XML появляться на экране в Android - PullRequest
1 голос
/ 17 ноября 2011

Я создал класс, который генерирует PopupWindow на основе введенных в него параметров. Я считаю, что это лучше подойдет для моих нужд, чем манипулирование контентом на основе XML для моего PopupWindow.

Создание окна и его содержимого, кажется, проходит гладко - на самом деле содержимое отображается на экране, которым я еще не смог управлять. Проблема в том, что мне не удалось найти пример используемого кода PopupWindow, который не использует функцию LayoutInflater для размещения его на экране. Поскольку мое PopupWindow не сгенерировано из файла XML, я не могу использовать LayoutInflater, чтобы разместить его на экране.

Что-то еще, что я, вероятно, должен объяснить, это то, что мой класс, генерирующий PopupWindow, в своем собственном файле . Т.е. это не подкласс файла Activity. Я сделал это таким образом, чтобы я мог легко скопировать свой класс 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", но мне неясно, какие параметры я должен использовать для этого. Может кто-нибудь сказать мне, как заставить мое всплывающее окно появляться на экране? Надеюсь, в самом центре этого. :)

1 Ответ

0 голосов
/ 17 ноября 2011

Попробуйте что-нибудь подобное

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

<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);
    }
    }
...