Android应用程序初始启动时弹出窗口

4

我正在寻找一段代码,它能在应用程序初始启动时弹出一个窗口,就像越来越多的应用程序中出现的变更日志一样。 我找到了一些类似的代码,但作为初学者,我无法确定将代码放在哪里,而且在试图修复错误后,仍然存在大量错误。 我在Eclipse中使用Android项目,并使用WebView显示网站。

XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
    android:layout_width="fill_parent" android:layout_height="fill_parent">



<WebView  xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/webview"
    android:layout_height="fill_parent" android:layout_width="fill_parent" android:scrollbarAlwaysDrawVerticalTrack="false"/>

</LinearLayout>

Java文件:

package com.A2Ddesigners.WhatThe;

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.view.KeyEvent;


public class Whatthe extends Activity {
    WebView webview;
    /** Called when the activity is first created. */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
            webview.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        webview = (WebView) findViewById(R.id.webview);
        webview.setWebViewClient(new HelloWebViewClient());
        webview.getSettings().setJavaScriptEnabled(true);
        webview.setInitialScale(50); 
        webview.getSettings().setUseWideViewPort(true); 
        webview.loadUrl("http://mdsitest2.com/");
    }
    private class HelloWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;


            }

            }   
        }
4个回答

2
使用我的代码,您可以在活动的初始时间上显示弹出窗口,适用于任何类型的视图。
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.PopupWindow;

public class PopupDispaly extends Activity {
    private PopupWindow outComePopup;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tiwter_login);
        final View anyView = findViewById(R.id.popo_up); // define heade your view
        anyView.postDelayed(new Runnable() {
            @Override
            public void run() {
                callFirstToolTip(anyView);
            }
        }, 5000); // hear you can put your delay time like 5000 mls

    }
    public void callFirstToolTip(View view) {
        Log.i("Started Info","popup");
        View layout = LayoutInflater.from(PopupDispaly.this).inflate(R.layout.popup_copy_delete, null); // define hear your layout file id.
        LinearLayout layCopyDelete = (LinearLayout) layout.findViewById(R.id.layCopyDelete);// hear define your id of sub lay like LinearLayout.
        outComePopup = new PopupWindow(layout);
        outComePopup.setFocusable(true);
        layCopyDelete.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
        outComePopup.setWidth(layCopyDelete.getMeasuredWidth());
        outComePopup.setHeight(layCopyDelete.getMeasuredHeight());
        outComePopup.setBackgroundDrawable(getResources().getDrawable(android.R.color.transparent));
        outComePopup.setOutsideTouchable(true);
        outComePopup.showAsDropDown(view);
    }

}

我的自定义视图布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/got_it_bg"
    android:layout_gravity="center_horizontal"
   android:id="@+id/layCopyDelete"
    android:layout_marginLeft="100dp"
    android:orientation="horizontal">

</LinearLayout>

运行得非常顺利! - xabush
感谢您的赞赏。 - Dhaval Solanki

0
你应该使用 PopupWindow.showAtLocation,但是要使用你的活动中一个视图的 post 方法。你也可以使用活动的根视图,使用 findViewById(android.R.id.content)
你的代码应该像这样:
View anyView = findViewById(R.id.anyView);
anyView.post(new Runnable()
{
    @Override
    public void run()
    {
        // Create and show PopupWindow
    }
});

0

我已经尝试过了,但无法使其工作,更不用说只在应用程序启动时的第一次让它工作。我会再试几次。 - Josh Fairbank
你还在为这个问题烦恼吗? - android-overflow

0

PopupWindow.showAsDropDown() 在延迟处理中可以解决这个问题,你可以通过0.5秒的延迟在 onCreate() 方法中执行显示 popupWindow


使用延迟并不能保证所需的结果,因为您无法预测应用程序运行设备的速度。最好使用视图的“post”方法。 - Muzikant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接