qq效果图 代码实现的效果图
首先,看到这个效果,想一下实现的思路:弹出的待办和删除按钮,是通过dialog实现的。那么这个dialog就要能完成几个效果,第一:自定义界面,第二:控制dialog的显示位置,第三:点击dialog区域之外的地方,dialog要消失,第四:dialog显示的时候,activity不要变暗。
下面就一步一步解决问题:
1,自定义dialog
package com.example.listitemdeletedemo; import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.TextView; /** * @文件名称: MyDialog.java * @功能描述: 自定义dialog * @版本信息: Copyright (c)2014 * @开发人员: vincent * @版本日志: 1.0 * @创建时间: 2014年3月18日 下午1:45:38 */ public class MyDialog extends Dialog implements OnClickListener { private TextView leftTextView, rightTextView; private IDialogOnclickInterface dialogOnclickInterface; private Context context; public MyDialog(Context context, int theme) { super(context, theme); this.context = context; // TODO Auto-generated constructor stub } @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.layout_dialog); leftTextView = (TextView) findViewById(R.id.textview_one); rightTextView = (TextView) findViewById(R.id.textview_two); leftTextView.setOnClickListener(this); rightTextView.setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub dialogOnclickInterface = (IDialogOnclickInterface) context; switch (v.getId()) { case R.id.textview_one: dialogOnclickInterface.leftOnclick(); break; case R.id.textview_two: dialogOnclickInterface.rightOnclick(); break; default: break; } } public interface IDialogOnclickInterface { void leftOnclick(); void rightOnclick(); } }
2,控制dialog显示位置
长按listview的item时。获取当前item在屏幕中的绝对位置,取其中的y值,即高度。根据listview item的height以及屏幕的高度,计算得到dialog的垂直位置,水平位置就直接居中就OK了
int[] location = new int[2]; // 获取当前view在屏幕中的绝对位置 // ,location[0]表示view的x坐标值,location[1]表示view的坐标值 view.getLocationOnScreen(location); view.setBackgroundColor(getResources().getColor(R.color.blue)); currentItemView = view; longClickPosition = position; DisplayMetrics displayMetrics = new DisplayMetrics(); Display display = MainActivity.this.getWindowManager().getDefaultDisplay(); display.getMetrics(displayMetrics); WindowManager.LayoutParams params = myDialog.getWindow().getAttributes(); params.gravity = Gravity.BOTTOM; params.y =display.getHeight() - location[1]; myDialog.getWindow().setAttributes(params); myDialog.setCanceledOnTouchOutside(true); //点击dialog区域之外的地方,dialog消失 myDialog.show();
3,dialog显示的时候,activity不变暗,这个在dialog的style中设置
<style name="MyDialogStyle" parent="@android:Theme.Dialog"> <item name="android:windowFrame">@null</item> <item name="android:windowNoTitle">true</item> <item name="android:windowBackground">@drawable/white</item> <item name="android:windowIsFloating">true</item> <item name="android:windowContentOverlay">@null</item> <item name="android:backgroundDimEnabled">false</item> </style>
原文:http://www.eoeandroid.com/thread-326918-1-1.html