自定义灵活 自动滚动的Dialog

xiaoxiao2021-02-28  71

效果图

一般的弹框很少显示列表数据的!这个是显示列表数据的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

转载请注明原文地址: https://www.6miu.com/read-61767.html

最新回复(0)