效果图
一般的弹框很少显示列表数据的!这个是显示列表数据的Dialog弹框,如果显示的数据数超6条,就会自动滚动
喜欢就拿去用,下面直接上源码。
主页面MainActivity文件
import android.support.v7.app.
AppCompatActivity;
import android.os.
Bundle;
import android.view.
View;
import android.widget.
TextView;
import android.widget.
Toast;
import com.example.jq.poptest.callback.
SortPopCallBack;
import com.example.jq.poptest.view.
DialogSelectItemUtil;
import java.util.
ArrayList;
import java.util.
HashMap;
import java.util.
List;
import java.util.
Map;
public
class MainActivity extends AppCompatActivity {
private
DialogSelectItemUtil seletcZhixunDilaog;
private
String selectedZhixunId =
"";
private
TextView tv_pop;
@Override
protected void onCreate(
Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(
R.layout.activity_main);
tv_pop = (
TextView)findViewById(
R.id.tv_pop);
tv_pop.setOnClickListener(new
View.
OnClickListener() {
@Override
public void onClick(
View view) {
showZiXunLingYuDialog();
}
});
}
/**
* 选择列表弹出框
*
/
private void showZiXunLingYuDialog() {
if(seletcZhixunDilaog==null) {
List<Map<String, Object>> zhixunData = new ArrayList<Map<String,Object>>();
//数据超过6条就自动滚动,想试就换第一个数据
// String[] titleStrs = new String[]{"谷歌","印象笔记","网易","豆瓣电台","有道词典","知乎"};
String[] titleStrs = new String[]{"谷歌","网页版微信","印象笔记","QQ邮箱","Gmail","网易","豆瓣电台","有道词典","知乎"};
for (int i = 0; i < titleStrs.length; i++) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("title", titleStrs[i]);
map.put("value", ""+(i+1));
zhixunData.add(map);
}
seletcZhixunDilaog = new DialogSelectItemUtil(MainActivity.this, zixunItemClick, zhixunData);
}
seletcZhixunDilaog.showDialog();
}
private SortPopCallBack zixunItemClick = new SortPopCallBack() {
@Override
public void itemClick(int position, Map<String, Object> map) {
// TODO Auto-generated method stub
seletcZhixunDilaog.dismissDialog();
if(map!=null) {
Toast.makeText(getApplication(),(String)map.get("title"),Toast.LENGTH_SHORT).show();
tv_pop.setText((String)map.get("title"));
selectedZhixunId = (String)map.get("value");
}
}
};
}
主页面的布局文件:activity_main.xml,就一个简单按钮
<?xml version=
"1.0" encoding=
"utf-8"?>
<
RelativeLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
android:id=
"@+id/activity_main"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent">
<
TextView
android:id=
"@+id/tv_pop"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:gravity=
"center"
android:padding=
"10dp"
android:text=
"弹框"/>
<
/RelativeLayout>
弹框类:DialogSelectItemUtil.java
import android.app.
Dialog;
import android.content.
Context;
import android.util.
DisplayMetrics;
import android.view.
LayoutInflater;
import android.view.
View;
import android.widget.
AdapterView;
import android.widget.
LinearLayout;
import android.widget.
ListView;
import android.widget.
SimpleAdapter;
import com.example.jq.poptest.
R;
import com.example.jq.poptest.callback.
SortPopCallBack;
import java.util.
ArrayList;
import java.util.
List;
import java.util.
Map;
/**
* Created by JQ on 2017/8/
6.
*
/
public class DialogSelectItemUtil {
private Context context = null;
private Dialog shongHuoDialog;
private List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
private SortPopCallBack callback = null;
private View view = null;
private LayoutInflater inflater = null;
private ListView lv_pop;
private SimpleAdapter adapter;
public DialogSelectItemUtil(Context mContext, SortPopCallBack callback, List<Map<String, Object>> pData) {
this.context = mContext;
this.callback = callback;
init();
setData(pData);
}
private void init() {
inflater = (LayoutInflater) context.getSystemService("layout_inflater");
view = inflater.inflate(R.layout.dialog_select_list, null);
lv_pop = (ListView) view.findViewById(R.id.lv_pop);
lv_pop.setOnItemClickListener(itemClick);
adapter = new SimpleAdapter(context, data,
R.layout.dialog_select_item, new String[] { "title" },
new int[] { R.id.tv1 });
lv_pop.setAdapter(adapter);
}
public void showDialog() {
if(shongHuoDialog == null) {
DisplayMetrics dm = context.getResources().getDisplayMetrics();
shongHuoDialog = new Dialog(context, R.style.custom_dialog);// 创建自定义样式dialog
shongHuoDialog.setCancelable(true);// 不可以用“返回键”取消
shongHuoDialog.setContentView(view, new LinearLayout.LayoutParams(
dm.widthPixels * 4 / 5,
LinearLayout.
LayoutParams.
MATCH_PARENT));
// 设置布局
}
if(!shongHuoDialog.isShowing()) {
shongHuoDialog.show();
}
}
public void dismissDialog() {
if(shongHuoDialog!=null && shongHuoDialog.isShowing()) {
shongHuoDialog.dismiss();
}
}
private void setData(
List<
Map<
String,
Object>> pData) {
data.clear();
if(pData!=null) {
data.addAll(pData);
}
if(data.size() >
6) {
LinearLayout.
LayoutParams lp= (
LinearLayout.
LayoutParams)lv_pop.getLayoutParams();
lp.height = dip2px(context,
6 *
40);
lv_pop.setLayoutParams(lp);
}
adapter.notifyDataSetChanged();
}
/** 把dip——>px *
/
public static int dip2px(Context context, float dipValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dipValue * scale + 0.5f);
}
private AdapterView.OnItemClickListener itemClick = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
if(callback!=null) {
Map<String,Object> map = data.get((int)arg3);
callback.itemClick((int)arg3,map);
}
}
};
}
回调函数:SortPopCallBack.java
import java.util.
Map;
/**
* Created by JQ on 2017/8/
6.
*
/
public interface SortPopCallBack {
public void itemClick(int position,Map<String,Object> map);
}
弹框的布局文件:dialog_select_list.xml
<?xml version=
"1.0" encoding=
"utf-8"?>
<
LinearLayout xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent" android:background=
"@drawable/dialog_okcancle_bottombg"
android:orientation=
"vertical"
android:paddingBottom=
"10dp"
android:paddingLeft=
"7dp"
android:paddingRight=
"7dp"
android:paddingTop=
"10dp">
<
TextView
android:id=
"@+id/tv1"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:gravity=
"center"
android:padding=
"10dp"
android:text=
"选项"
android:textColor=
"#0000ff"
android:textSize=
"23dp"
android:textStyle=
"bold"/>
<
View
android:layout_width=
"match_parent"
android:layout_height=
"1px"
android:background=
"#CDCDCD"/>
<
ListView
android:id=
"@+id/lv_pop"
android:layout_width=
"fill_parent"
android:layout_height=
"wrap_content"
android:divider=
"#fff"
android:dividerHeight=
"0.5dp"
android:listSelector=
"#00000000"
android:overScrollMode=
"never"
android:scrollbars=
"none"/>
<
/LinearLayout>
列表的中每个项的布局
<?xml version=
"1.0" encoding=
"utf-8"?>
<
LinearLayout xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"vertical">
<
TextView
android:id=
"@+id/tv1"
android:layout_width=
"match_parent"
android:layout_height=
"39dp"
android:gravity=
"center"
android:text=
"item"
android:textColor=
"#000000"
android:textSize=
"18dp"/>
<
View
android:layout_width=
"match_parent"
android:layout_height=
"1px"
android:background=
"#CDCDCD"/>
<
/LinearLayout>
自定义Dialog样式:custom_dialog
<!-- 自定义
Dialog样式 -->
<style name=
"custom_dialog" parent=
"android:style/Theme.Dialog">
<item name=
"android:windowFrame">
@null<
/item>
<item name="android:windowIsFloating">true</item>
<item name=
"android:windowIsTranslucent">
true<
/item>
<item name="android:windowNoTitle">true</item>
<item name=
"android:background">
@android:color/transparent</item>
<item name=
"android:windowBackground">
@android:color/transparent</item>
<item name=
"android:backgroundDimEnabled">
true<
/item>
<item name="android:backgroundDimAmount">0.6</item>
<
/style>
以上就便已是全部代码
源码:http://download.csdn.net/detail/qq_32519693/9922926