`
qiuyuanshan
  • 浏览: 120108 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android弹出选择对话框-仿某团购网android客户端栏目选择

阅读更多

效果图一:

 效果图二:

 

未完善,还比较简单:

  弹出对话框,先只显示左边列表,右边列表需要宽度设置为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使用Activity用作弹出式对话框

    在Android开发中,有时我们需要创建一个弹出式对话框来与用户进行交互,但不同于常见的`Dialog`类,我们可以利用`Activity`来实现这一功能。这种方式适用于需要更复杂交互或者自定义布局的情况。本文将详细讲解如何...

    android仿QQ的头像选择弹出的对话框,酷似!

    总结来说,实现“android仿QQ的头像选择弹出的对话框”需要以下步骤: 1. 创建`AlertDialog`并设置内容视图。 2. 使用`GridView`或`RecyclerView`展示头像。 3. 设置头像点击事件,处理头像选择。 4. 准备数据源,...

    android 具有选择功能的对话框dialog

    AlertDialog是Android SDK提供的一种内置对话框类型,它提供了多种样式和行为,可以用于展示警告、确认或简单的选择操作。通常,AlertDialog包含一个标题、一个可选的消息文本,以及一个或多个按钮,如“确定”、...

    Android高级应用源码-仿QQ的头像选择弹出的对话框,酷似!.zip

    这个"Android高级应用源码-仿QQ的头像选择弹出的对话框,酷似!.zip"文件包含了一份实现这一功能的源代码示例,通过分析这些资源,我们可以学习到以下关键知识点: 1. **自定义对话框(Custom Dialog)**:在...

    卓开发:弹出自定义对话框自动播放视频(仿视频广告效果,使用mediaplayer和surfaceview做播放器)

    在安卓应用开发中,创建一个弹出自定义对话框并自动播放视频的功能,是提升用户体验、吸引用户注意力的有效手段,尤其适用于实现类似视频广告的效果。在这个项目中,我们使用了MediaPlayer和SurfaceView作为视频播放...

    Android弹出对话框

    在给定的标题“Android弹出对话框”中,我们可以理解这是关于如何在Android环境中创建和使用对话框的教程。描述提到的“完整的代码”涵盖了多选、单选和登录验证等不同类型的对话框功能,这将涉及到Android SDK中的...

    Android底部弹出对话框

    "Android底部弹出对话框"是一个常见的交互模式,通常用于展示附加信息或者提供操作选项。本项目着重讲解如何在Android应用程序中实现这种功能。 首先,我们从样式(styles.xml)文件入手。在Android中,我们可以...

    Android高级应用源码-仿QQ的头像选择弹出的对话框,酷似!.rar

    在Android开发中,这种弹出式对话框通常用于让用户在多种选项中选择一个,例如选择个人头像。这里我们将深入探讨实现这样一个功能所涉及的关键知识点。 1. **Android DialogFragment**: 弹出的对话框在Android中...

    安卓Dialog对话框相关-仿QQ的头像选择弹出的对话框酷似!.zip

    在Android开发中,Dialog对话框是一种非常常见的用户交互元素,用于在主界面之上显示临时性的信息或者需要用户做出选择的情况。本压缩包中的资源主要围绕如何创建一个类似于QQ头像选择对话框的效果展开,这对于提升...

    Delphi XE10.1.2 Android 文件选择保存对话框

    在本文中,我们将深入探讨如何在Delphi XE10.1.2环境中实现一个Android平台上的文件选择和保存对话框。Delphi是一款强大的RAD(快速应用开发)工具,允许开发者使用Object Pascal语言构建跨平台的应用程序,包括...

    Android 仿QQ的头像选择弹出的对话框,酷似!-IT计算机-毕业设计.zip

    本项目"Android 仿QQ的头像选择弹出的对话框,酷似!"是一个毕业设计的示例,旨在帮助学生理解和掌握Android应用的源码实现,以及如何在自己的应用中实现类似QQ的头像选择功能。下面我们将深入探讨这个项目的相关...

    Android例子源码仿QQ的头像选择弹出的对话框

    以上是实现"Android例子源码仿QQ的头像选择弹出的对话框"所需的关键技术和步骤。通过深入理解这些知识点,开发者可以创建一个功能完备且用户体验良好的头像选择功能。在实际开发中,还可以根据需求进行功能扩展,如...

    详解Android 全局弹出对话框SYSTEM_ALERT_WINDOW权限

    在Android开发中,全局弹出对话框是一种常见需求,特别是在某些特定场景下,如通知用户、请求确认或显示重要信息。然而,为了实现全局对话框,开发者需要掌握一种特殊的权限,即`SYSTEM_ALERT_WINDOW`权限。这个权限...

    android弹出对话框

    本文将深入探讨如何在Android应用中创建和使用弹出对话框,特别是针对新手开发者,提供详细的步骤和代码示例。 ### 1. 弹出对话框的重要性 在应用程序中,弹出对话框可以用来显示警告、提示、错误消息或确认操作等...

    Android常用对话框源码对话框大全

    在Android开发中,对话框(Dialog)是一种非常重要的组件,用于与用户进行交互,提供临时的通知、确认或者选项。在"Android常用对话框源码--对话框大全"中,我们可以探讨多种类型的对话框及其实现方式。 1. **系统...

    Android例子源码自定义对话框

    在Android开发中,自定义对话框(Dialog)是常见的需求,它可以为用户提供更丰富的交互体验。自定义对话框可以按照应用程序的设计风格进行定制,包括布局、颜色、按钮样式等,从而提升应用的用户体验。本篇将围绕...

    Android应用源码之仿QQ的头像选择弹出的对话框,酷似!.rar

    本示例源码“Android应用源码之仿QQ的头像选择弹出的对话框,酷似!”就是一个典型的例子,它展示了如何在自己的应用中实现一个类似于QQ的头像选择对话框。这个对话框通常用于用户设置或更改个人头像时出现,提供了...

    android 打开文本对话框

    在Android开发中,创建并显示一个文本对话框是常见的任务,尤其在用户需要输入或确认信息时。这个场景中提到的“android 打开文本对话框”是一个Android应用功能,用于展示一个包含文本输入和交互的对话框。下面将...

    ReactNative开发的iOS和Android弹出对话框

    对于弹出对话框,这意味着组件需要在iOS和Android上展示一致的外观和交互行为,这可能需要使用条件渲染和平台特定的样式。 3. **样式和布局**:在React Native中,样式通常是通过JavaScript对象定义的,可以实现...

    仿QQ的头像选择弹出的对话框源码

    本文将深入探讨如何实现一个仿QQ头像选择弹出对话框的源码,这是一段非常实用的代码,对于Android开发者来说具有很高的参考价值。 首先,我们从“仿QQ的头像选择弹出的对话框源码”这个标题中可以看出,我们的目标...

Global site tag (gtag.js) - Google Analytics