效果图一:
效果图二:
未完善,还比较简单:
弹出对话框,先只显示左边列表,右边列表需要宽度设置为0,用visiable会影响使用。
选中左边列表时,再根据数据情况展现右边或者是选中提交。
PopupCategory.java
package com.example.ysq.activity; import java.util.ArrayList; import java.util.List; import com.example.ysq.R; import com.example.ysq.adapter.CategoryAdapter; import com.example.ysq.entity.CategoryEntity; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.LinearLayout.LayoutParams; import android.widget.ListView; import roboguice.fragment.RoboDialogFragment; import roboguice.inject.InjectView; public class PopupCategory extends RoboDialogFragment{ @InjectView(R.id.rootcategory) private ListView rootcategory; @InjectView(R.id.childcategory) private ListView childcategory; @InjectView(R.id.child_lay) private View child_lay; private Window window; public int x,y; @Override public void onActivityCreated(Bundle savedInstanceState){ super.onActivityCreated(savedInstanceState); this.rootcategory.setDrawSelectorOnTop(true); this.rootcategory.setVerticalScrollBarEnabled(false); this.childcategory.setDrawSelectorOnTop(true); this.childcategory.setVerticalScrollBarEnabled(false); final List<CategoryEntity> data=new ArrayList<CategoryEntity>(); for(int i=0;i<20;i++){ CategoryEntity e=new CategoryEntity(); data.add(e); e.setSeq(i); e.setCount(i%3); e.setName("测试"+i); List<CategoryEntity> childList=new ArrayList<CategoryEntity>(); e.setChildList(childList); for(int j=0;j<e.getCount();j++){ CategoryEntity ce=new CategoryEntity(); childList.add(ce); ce.setSeq(j); ce.setCount(j); ce.setName("子目录"+i+":"+j); } } final CategoryAdapter adapter=new CategoryAdapter(getActivity(), data, R.layout.category_item); rootcategory.setAdapter(adapter); final CategoryAdapter childadapter=new CategoryAdapter(getActivity(), new ArrayList<CategoryEntity>(), R.layout.category_child_item); childcategory.setAdapter(childadapter); rootcategory.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view,int position, long id) { //用下面getChildAt会报异常,因为这个只能在手机屏幕可视范围内能获取到,超出返回null // View v; // Log.e("i:", parent.getCount()+""); // Log.e("i:", parent.getChildCount()+""); // for (int i = 0; i < parent.getChildCount(); i++) { // Log.e("i:", i+""); // v = parent.getChildAt(i); // if (position == i) { // v.setBackgroundColor(Color.argb(153, 0, 186, 255)); // } else { // v.setBackgroundColor(Color.TRANSPARENT); // } // } adapter.setFocus(position); CategoryEntity category=data.get(position); List<CategoryEntity> childList=category.getChildList(); if(childList.size()>0){ childadapter.setData(childList); WindowManager.LayoutParams localLayoutParams; localLayoutParams=window.getAttributes(); localLayoutParams.width = (int)(width-localLayoutParams.x*2); localLayoutParams.height = (int)(height-localLayoutParams.y*2); window.setAttributes(localLayoutParams); LayoutParams params=new LayoutParams((int)(width/2-localLayoutParams.x),localLayoutParams.height); child_lay.setLayoutParams(params); }else{ //todo: PopupCategory.this.dismiss(); } } }); childcategory.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view,int position, long id) { PopupCategory.this.dismiss(); } }); // child_lay.setVisibility(View.INVISIBLE); //设置宽度高度 LayoutParams params=new LayoutParams(0, 0); child_lay.setLayoutParams(params); } private int height; private int width; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { window = this.getDialog().getWindow(); WindowManager.LayoutParams localLayoutParams; window.setWindowAnimations(R.style.push_top); window.setBackgroundDrawableResource(R.drawable.bg_category); localLayoutParams=window.getAttributes(); localLayoutParams.gravity=Gravity.TOP|Gravity.LEFT; localLayoutParams.x=this.x; localLayoutParams.y=this.y; window.addFlags(Window.FEATURE_PROGRESS); localLayoutParams.dimAmount=0.6F; DisplayMetrics displaymetrics = new DisplayMetrics(); this.getActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); height = displaymetrics.heightPixels; width = displaymetrics.widthPixels; localLayoutParams.width = (int)(width/2-localLayoutParams.x); localLayoutParams.height = (int)(height-localLayoutParams.y*2); window.setAttributes(localLayoutParams); this.setCancelable(true); this.getDialog().setCanceledOnTouchOutside(true); View localView = inflater.inflate(R.layout.popup_category, container, false); return localView; } }
CategoryAdapter.java
package com.example.ysq.adapter; import java.util.List; import com.example.ysq.R; import com.example.ysq.entity.CategoryEntity; import android.content.Context; import android.graphics.Color; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; public class CategoryAdapter extends BaseAdapter { private List<CategoryEntity> entityList; private LayoutInflater inflater; private int itemViewResource; private int index = 0; public CategoryAdapter(Context paramContext, List<CategoryEntity> entityList, int itemViewResource) { this.inflater = ((LayoutInflater) paramContext.getSystemService("layout_inflater")); this.entityList = entityList; this.itemViewResource = itemViewResource; } public void setData(List<CategoryEntity> paramList){ this.entityList=paramList; notifyDataSetChanged(); } private CategoryEntity b(int paramInt) { return (CategoryEntity) this.entityList.get(paramInt); } public final void setFocus(int index ) { this.index = index ; notifyDataSetChanged(); } public final int getCount() { if (isNull(this.entityList)) return 0; return this.entityList.size(); } public final long getItemId(int paramInt) { return paramInt; } public final View getView(int paramInt, View paramView, ViewGroup paramViewGroup) { CategoryEntity localwk = b(paramInt); ListItemView itemView; if (paramView == null) { paramView = this.inflater.inflate(this.itemViewResource, paramViewGroup, false); itemView = new ListItemView(); itemView.name = ((TextView)paramView.findViewById(R.id.name)); itemView.count = ((TextView)paramView.findViewById(R.id.count)); itemView.haschild = ((ImageView)paramView.findViewById(R.id.haschild)); paramView.setTag(itemView); }else{ itemView = (ListItemView)paramView.getTag(); } if(this.itemViewResource==R.layout.category_item){//父结构 if(localwk.getSeq()==this.index){ paramView.setBackgroundColor(Color.argb(255,234,234,234));//#ffeaeaea }else{ paramView.setBackgroundDrawable(null); } } itemView.name.setText(localwk.getName()); if (localwk.getCount() != -1) itemView.count.setText(String.valueOf(localwk.getCount())); if (isNull(localwk.getChildList())) itemView.haschild.setVisibility(View.INVISIBLE); else itemView.haschild.setVisibility(View.VISIBLE); return paramView; } static class ListItemView { TextView name; TextView count; public ImageView haschild; } public <T> boolean isNull(List<T> paramList) { return (paramList == null) || (paramList.isEmpty()); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return null; } }
相关推荐
在Android开发中,有时我们需要创建一个弹出式对话框来与用户进行交互,但不同于常见的`Dialog`类,我们可以利用`Activity`来实现这一功能。这种方式适用于需要更复杂交互或者自定义布局的情况。本文将详细讲解如何...
总结来说,实现“android仿QQ的头像选择弹出的对话框”需要以下步骤: 1. 创建`AlertDialog`并设置内容视图。 2. 使用`GridView`或`RecyclerView`展示头像。 3. 设置头像点击事件,处理头像选择。 4. 准备数据源,...
AlertDialog是Android SDK提供的一种内置对话框类型,它提供了多种样式和行为,可以用于展示警告、确认或简单的选择操作。通常,AlertDialog包含一个标题、一个可选的消息文本,以及一个或多个按钮,如“确定”、...
这个"Android高级应用源码-仿QQ的头像选择弹出的对话框,酷似!.zip"文件包含了一份实现这一功能的源代码示例,通过分析这些资源,我们可以学习到以下关键知识点: 1. **自定义对话框(Custom Dialog)**:在...
在安卓应用开发中,创建一个弹出自定义对话框并自动播放视频的功能,是提升用户体验、吸引用户注意力的有效手段,尤其适用于实现类似视频广告的效果。在这个项目中,我们使用了MediaPlayer和SurfaceView作为视频播放...
在给定的标题“Android弹出对话框”中,我们可以理解这是关于如何在Android环境中创建和使用对话框的教程。描述提到的“完整的代码”涵盖了多选、单选和登录验证等不同类型的对话框功能,这将涉及到Android SDK中的...
"Android底部弹出对话框"是一个常见的交互模式,通常用于展示附加信息或者提供操作选项。本项目着重讲解如何在Android应用程序中实现这种功能。 首先,我们从样式(styles.xml)文件入手。在Android中,我们可以...
在Android开发中,这种弹出式对话框通常用于让用户在多种选项中选择一个,例如选择个人头像。这里我们将深入探讨实现这样一个功能所涉及的关键知识点。 1. **Android DialogFragment**: 弹出的对话框在Android中...
在Android开发中,Dialog对话框是一种非常常见的用户交互元素,用于在主界面之上显示临时性的信息或者需要用户做出选择的情况。本压缩包中的资源主要围绕如何创建一个类似于QQ头像选择对话框的效果展开,这对于提升...
在本文中,我们将深入探讨如何在Delphi XE10.1.2环境中实现一个Android平台上的文件选择和保存对话框。Delphi是一款强大的RAD(快速应用开发)工具,允许开发者使用Object Pascal语言构建跨平台的应用程序,包括...
在Android开发中,全局弹出对话框是一种常见需求,特别是在某些特定场景下,如通知用户、请求确认或显示重要信息。然而,为了实现全局对话框,开发者需要掌握一种特殊的权限,即`SYSTEM_ALERT_WINDOW`权限。这个权限...
本文将深入探讨如何在Android应用中创建和使用弹出对话框,特别是针对新手开发者,提供详细的步骤和代码示例。 ### 1. 弹出对话框的重要性 在应用程序中,弹出对话框可以用来显示警告、提示、错误消息或确认操作等...
在Android开发中,对话框(Dialog)是一种非常重要的组件,用于与用户进行交互,提供临时的通知、确认或者选项。在"Android常用对话框源码--对话框大全"中,我们可以探讨多种类型的对话框及其实现方式。 1. **系统...
QQ的头像选择对话框在弹出和关闭时有平滑的动画效果。Android提供了`Animator`和`Transition`类用于实现这些效果。开发者可能会使用`ObjectAnimator`来改变View的属性,或者使用`TransitionManager`来处理视图切换...
在Android开发中,自定义对话框(Dialog)是常见的需求,它可以为用户提供更丰富的交互体验。自定义对话框可以按照应用程序的设计风格进行定制,包括布局、颜色、按钮样式等,从而提升应用的用户体验。本篇将围绕...
本示例源码“Android应用源码之仿QQ的头像选择弹出的对话框,酷似!”就是一个典型的例子,它展示了如何在自己的应用中实现一个类似于QQ的头像选择对话框。这个对话框通常用于用户设置或更改个人头像时出现,提供了...
在Android开发中,创建并显示一个文本对话框是常见的任务,尤其在用户需要输入或确认信息时。这个场景中提到的“android 打开文本对话框”是一个Android应用功能,用于展示一个包含文本输入和交互的对话框。下面将...
对于弹出对话框,这意味着组件需要在iOS和Android上展示一致的外观和交互行为,这可能需要使用条件渲染和平台特定的样式。 3. **样式和布局**:在React Native中,样式通常是通过JavaScript对象定义的,可以实现...
本文将深入探讨如何实现一个仿QQ头像选择弹出对话框的源码,这是一段非常实用的代码,对于Android开发者来说具有很高的参考价值。 首先,我们从“仿QQ的头像选择弹出的对话框源码”这个标题中可以看出,我们的目标...
介绍安卓5种对话框:... 1 弹出普通对话框 --- 系统更新 2 自定义对话框-- 用户登录 3 时间选择对话框 -- 时间对话框 4 进度条对话框 -- 信息加载.. 5 popuWindow对话框