单击时弹出窗口不会出现

时间:2013-12-16 07:06:18

标签: android

我是android的新手。我想在我的应用程序中使用弹出窗口。我的activity_main.xml文件中有一个TextView和一个按钮,popup.xml文件中有一个TextView和两个按钮 这是这些文件

popup.xml file

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/popup_element"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<TableRow
    android:id="@+id/tableRow1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >


<TextView
    android:id="@+id/txt1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

    android:text="This is popoup" />
 </TableRow>

<TableRow
    android:id="@+id/tableRow2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >


<Button
    android:id="@+id/Unpair"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Unpair" />

<Button
    android:id="@+id/Cancel"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="cancel" />
</TableRow>
</TableLayout>

这里是activity_main.xml文件

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" />

<Button
    android:id="@+id/btn1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/textView1"
    android:layout_marginLeft="18dp"
    android:layout_marginTop="28dp"
    android:layout_toRightOf="@+id/textView1"
    android:text="Cick me" />

</RelativeLayout>

我想在点击“点击我”按钮时显示一个弹出窗口。但是,当我按下按钮

时,弹出窗口不会出现
The java code

package com.example.ctrckerapp;

import android.os.Bundle;
import android.widget.*;
import android.app.Activity;
import android.view.*;
import android.content.*;
public class MainActivity extends Activity {

private PopupWindow  pw;
private Button Cancel;
private Button Unpair;
private Button Click;
View layout;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    Click=(Button)findViewById(R.id.btn1);
    Click.setOnClickListener(new View.OnClickListener() {  
          public void onClick(View v) 
          {
              initiatePopup();
          }
               });
     try{
    Cancel.setOnClickListener(new View.OnClickListener() {  
          public void onClick(View v) 
          {
              pw.dismiss();
          }
           });


    layout.post(new Runnable(){
        public void run()
        {
        pw.showAtLocation(layout, Gravity.BOTTOM, 100, 700);
        }
    });

}catch(Exception e){
    Toast.makeText(getApplicationContext(),      
 e.toString(),Toast.LENGTH_LONG).show();
}


}

public void initiatePopup()
 {
    try{
    LayoutInflater inflater=       
(LayoutInflater)MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    layout=inflater.inflate(R.layout.popup, 
(ViewGroup)findViewById(R.id.popup_element));
    pw=new PopupWindow(layout,300,670,true);
    Cancel =(Button)layout.findViewById(R.id.Cancel);
    Unpair=(Button)layout.findViewById(R.id.Unpair);


    }catch(Exception e){
        Toast.makeText(getApplicationContext(), 
e.toString(),Toast.LENGTH_LONG).show();
    }

}
 @Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
     getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

2 个答案:

答案 0 :(得分:0)

你可以看一下基本的弹出式创建方法

http://www.androidhub4you.com/2012/07/how-to-create-popup-window-in-android.html

顺便说一下,再次检查你的代码并尝试将以下行放入你的initiatePopup()并在你想弹出时调用它。

pw.showAtLocation(layout, Gravity.BOTTOM, 100, 700); 

也许是弹出窗口,所以也试试吧,

pw.showAtLocation(layout, Gravity.CENTER, 0, 0);

答案 1 :(得分:0)

我可能会迟到,但试试这个。

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
            pw.showAsDropDown(context.getCurrentFocus(), 0, 0,Gravity.CENTER_HORIZONTAL|Gravity.TOP);
        }else{
            pw.showAtLocation(context.getCurrentFocus(), Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL, 10, 10);

        }

context.getCurrentFocus()可以替换为任何视图......只是一个视图

也可以添加pw.setWindowLayoutMode(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);