在屏幕上创建一个对话框点击(Android)

时间:2011-11-05 18:47:15

标签: android android-layout android-dialog

一旦我的程序用户在屏幕上(在屏幕的任何位置)进行长按,我就需要出现一个对话框...

到目前为止,我发现的所有教程只帮助我按下按钮点击对话框,但这真的不是我需要的。

有人可以帮我吗?

我的代码现在如下:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    /* In the onCreate() method, we need to set the content to our XML layout, 
     * extract the TabHost object, and call setup() on the TabHost 
     * (we need to do this because our Activity is not a TabActivity). */

    tabHost = (TabHost) findViewById(android.R.id.tabhost);

    tabHost.setup();
    tabHost.setOnTabChangedListener(this);

    //Next, we want to extract our ListView from the XML, set it to a member variable, and add some initial coordinates to its list adapter
    listView = (ListView) findViewById(R.id.list);
    listView.setEmptyView((TextView) findViewById(R.id.empty));

    // Random points on the geo list:
    List<GeoPoint> pointsList = new ArrayList<GeoPoint>();
    pointsList.add(new GeoPoint((int)(-30.03269*1E6), (int)(-51.225514*1E6)));
    pointsList.add(new GeoPoint((int)(41.89001*1E6), (int)(12.496948*1E6)));
    listView.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, pointsList));

    // add an onclicklistener to see point on the map
    listView.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView parent, View view, int position, long id) {
            GeoPoint geoPoint = (GeoPoint) listView.getAdapter().getItem(position);
            if(geoPoint != null) {
                // have map view moved to this point
                setMapZoomPoint(geoPoint, 12);
                // programmatically switch tabs to the map view
                tabHost.setCurrentTabByTag(MAP_TAB_TAG);
            }
        }
    });

    // Then, we want to extract our MapView from the XML and set it to a member variable.
    mapView = (MapView) findViewById(R.id.mapview);
    mapView.setBuiltInZoomControls(true);
    mapView.postInvalidate();




    final AlertDialog.Builder alert = new AlertDialog.Builder(this);

    alert.setTitle("make route");
    alert.setMessage("from:");

    // Set an EditText view to get user input 
    final EditText fromAddress = new EditText(this);
    alert.setView(fromAddress);

    alert.setMessage("to:");
    final EditText toAddress = new EditText(this);
    alert.setView(toAddress);

    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
      Editable value1 = fromAddress.getText();
      Editable value2 = toAddress.getText();
      // Do something with value!
      }
    });

     Editable value2 = toAddress.getText();


    alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dialog, int whichButton) {
        // Canceled.
      }
    });


    View layout = findViewById(R.id.layout);

    layout.setOnLongClickListener(new View.OnLongClickListener() {

        public boolean onLongClick(View v) {
    alert.show();
            return false;
        }
    });

布局:

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout 
        android:id="@+id/layout"
        android:orientation="vertical"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent">
        <TabWidget 
            android:id="@android:id/tabs"
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" />
        <FrameLayout 
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent" 
            android:layout_height="fill_parent">
            <LinearLayout
                android:orientation="vertical"
                android:layout_width="fill_parent" 
                android:layout_height="fill_parent"
                android:id="@+id/main">
                <ListView 
                    android:id="@+id/list" 
                    android:layout_width="fill_parent"
                    android:layout_height="0dip" 
                    android:layout_weight="1" />
                <TextView 
                    android:id="@+id/empty" 
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" 
                    android:gravity="center"/>

            </LinearLayout>

            <RelativeLayout 
                xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/mainlayout" 
                android:orientation="vertical"
                android:layout_width="fill_parent" 
                android:layout_height="fill_parent">
                <com.google.android.maps.MapView
                    android:id="@+id/mapview" 
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent" 
                    android:clickable="true"
                    android:apiKey="MY KEY HERE" />
            </RelativeLayout>

        </FrameLayout>
    </LinearLayout>
</TabHost>

活动是一个MapActivity,所以我认为我无法长时间点击MapActivity吗?

3 个答案:

答案 0 :(得分:2)

例如,您可以在布局文件中为LineraLayout设置id

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" 
    android:id="@+id/layout">

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

</LinearLayout>

并在活动中添加onLongClickListener

 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        View layout = findViewById(R.id.layout);

        layout.setOnLongClickListener(new View.OnLongClickListener() {

            @Override
            public boolean onLongClick(View v) {
                //show dialog box
                return false;
            }
        });
    }

//修改

我认为你应该从AlertDialog.Builder创建AlertDialog并在那个显示对话框之后。

alert是你的AlertDialog.Builder

AlertDialog alert2 = alert.create();
alert2.show() // you have to show AlertDialog, not AlertDialog.Builder

答案 1 :(得分:1)

Your Actvity should implements onLongClickListener

public class Layout1Activity extends Activity implements OnLongClickListener{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    public boolean onLongClick(View arg0) {
        // TODO Auto-generated method stub

/////////////////Perform Action   ////////////////////

        return false;
    }

答案 2 :(得分:0)

我认为最好的方法是实现活动的onTouchEvent。重要的是ontouch事件并将您的代码放入其中。 :)

public boolean onTouchEvent(MotionEvent event) {
    // TODO Auto-generated method stub
    return super.onTouchEvent(event);
}