android 京东商品筛选功能,Android开发实现仿京东商品搜索选项卡弹窗功能

本文实例讲述了Android开发实现仿京东商品搜索选项卡弹窗功能。分享给大家供大家参考,具体如下:

一、效果图:

149c5cd5ce4b40a930bfaf58408ddc3b.gif

二、思路:

(1)首先顶部布局由通过LinearLayout水平按比重平均分配各个item宽度。

(2)每个item设置两种状态,点击状态与未点击状态

(3)弹窗由PopupWindow实现

三、布局

(1)item布局

android:id="@+id/rl_priority_filter"

android:layout_width="fill_parent"

android:layout_height="@dimen/dp38"

android:layout_below="@+id/v_line_1"

android:background="@color/f8f8f8"

android:paddingTop="@dimen/dp7" >

android:id="@+id/v_line"

android:layout_width="match_parent"

android:layout_height="@dimen/px1"

android:layout_alignParentBottom="true"

android:layout_marginTop="-1dp"

android:background="@color/e5e5e5"

android:visibility="gone" />

android:layout_width="match_parent"

android:layout_height="fill_parent"

android:layout_marginLeft="@dimen/dp8"

android:layout_marginRight="@dimen/dp8"

android:orientation="horizontal" >

android:id="@+id/ll_priority_1"

android:layout_width="@dimen/dp0"

android:layout_height="@dimen/dp24"

android:layout_weight="1"

android:background="@drawable/rounded_priority_search"

android:gravity="center"

android:orientation="horizontal"

android:visibility="invisible" >

android:id="@+id/tv_condition_1"

android:layout_width="wrap_content"

android:layout_height="@dimen/dp24"

android:gravity="center"

android:text="品牌品牌"

android:textSize="@dimen/sp13"

android:textColor="@color/c_666666"/>

android:id="@+id/iv_codition_tip1"

android:layout_width="@dimen/dp8"

android:layout_height="@dimen/dp4"

android:layout_marginLeft="@dimen/dp4"

android:background="@drawable/priority_search_down"

android:contentDescription="@string/img_desc" />

android:id="@+id/ll_priority_2"

android:layout_width="@dimen/dp0"

android:layout_height="@dimen/dp24"

android:layout_marginLeft="@dimen/dp14"

android:layout_weight="1"

android:background="@drawable/rounded_priority_search"

android:gravity="center"

android:orientation="horizontal"

android:visibility="invisible" >

android:id="@+id/tv_condition_2"

android:layout_width="wrap_content"

android:layout_height="@dimen/dp24"

android:gravity="center"

android:text="品牌时间"

android:textSize="@dimen/sp13"

android:textColor="@color/c_666666"/>

android:id="@+id/iv_codition_tip2"

android:layout_width="@dimen/dp8"

android:layout_height="@dimen/dp4"

android:layout_marginLeft="@dimen/dp4"

android:background="@drawable/priority_search_down"

android:contentDescription="@string/img_desc" />

android:id="@+id/ll_priority_3"

android:layout_width="@dimen/dp0"

android:layout_height="@dimen/dp24"

android:layout_marginLeft="@dimen/dp14"

android:layout_weight="1"

android:background="@drawable/rounded_priority_search"

android:gravity="center"

android:orientation="horizontal"

android:visibility="invisible" >

android:id="@+id/tv_condition_3"

android:layout_width="wrap_content"

android:layout_height="@dimen/dp24"

android:gravity="center"

android:text="上市品牌"

android:textSize="@dimen/sp13"

android:textColor="@color/c_666666" />

android:id="@+id/iv_codition_tip3"

android:layout_width="@dimen/dp8"

android:layout_height="@dimen/dp4"

android:layout_marginLeft="@dimen/dp4"

android:background="@drawable/priority_search_down"

android:contentDescription="@string/img_desc" />

android:id="@+id/ll_priority_4"

android:layout_width="@dimen/dp0"

android:layout_height="@dimen/dp24"

android:layout_marginLeft="@dimen/dp14"

android:layout_weight="1"

android:background="@drawable/rounded_priority_search"

android:gravity="center"

android:orientation="horizontal"

android:visibility="invisible" >

android:id="@+id/tv_condition_4"

android:layout_width="wrap_content"

android:layout_height="@dimen/dp24"

android:gravity="center"

android:text="上市时间"

android:textSize="@dimen/sp13"

android:textColor="@color/c_666666"/>

android:id="@+id/iv_codition_tip4"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="@dimen/dp4"

android:background="@drawable/priority_search_down"

android:contentDescription="@string/img_desc" />

(2)点击item与未点击item背景

(2.1)点击item背景

android:shape="rectangle" >

android:bottom="@dimen/dp2"

android:left="@dimen/dp0"

android:right="@dimen/dp0"

android:top="@dimen/dp2" />

android:width="@dimen/px1"

android:color="@color/e5e5e5" />

(2.2)未点击item背景

android:bottomLeftRadius="0dp"

android:bottomRightRadius="0dp"

android:topLeftRadius="@dimen/dp4"

android:topRightRadius="@dimen/dp4" />

android:left="@dimen/px1"

android:right="@dimen/px1"

android:top="@dimen/px1"

android:bottom="@dimen/dp0">

android:bottomLeftRadius="0dp"

android:bottomRightRadius="0dp"

android:topLeftRadius="@dimen/dp4"

android:topRightRadius="@dimen/dp4" />

android:bottom="@dimen/dp2"

android:left="@dimen/dp0"

android:right="@dimen/dp0"

android:top="-4dp" />

(3)item切换逻辑

/**

* 设置优先筛选弹窗选中类型

*

* @Description

* @author XiongJie

* @param selectType

*/

public void setSelectState(int selectType) {

//4、设置每个筛选条件布局的参数

switch (selectType) {

case 0:

v_line.setVisibility(View.VISIBLE);

llPriority1.setBackgroundResource(R.drawable.rounded_priority_search_selected);

llPriority2.setBackgroundResource(R.drawable.rounded_priority_search);

llPriority3.setBackgroundResource(R.drawable.rounded_priority_search);

llPriority4.setBackgroundResource(R.drawable.rounded_priority_search);

ivCoditionTip1.setBackgroundResource(R.drawable.priority_search_up);

ivCoditionTip2.setBackgroundResource(R.drawable.priority_search_down);

ivCoditionTip3.setBackgroundResource(R.drawable.priority_search_down);

ivCoditionTip4.setBackgroundResource(R.drawable.priority_search_down);

params21.setMargins((int) DisplayUtil.dip2px(SearchResultActivity.this, 18), 0, 0, 0);

params31.setMargins((int) DisplayUtil.dip2px(SearchResultActivity.this, 18), 0, 0, 0);

params41.setMargins((int) DisplayUtil.dip2px(SearchResultActivity.this, 18), 0, 0, 0);

llPriority1.setLayoutParams(params12);

llPriority2.setLayoutParams(params21);

llPriority3.setLayoutParams(params31);

llPriority4.setLayoutParams(params41);

break;

case 1:

v_line.setVisibility(View.VISIBLE);

llPriority1.setBackgroundResource(R.drawable.rounded_priority_search);

llPriority2.setBackgroundResource(R.drawable.rounded_priority_search_selected);

llPriority3.setBackgroundResource(R.drawable.rounded_priority_search);

llPriority4.setBackgroundResource(R.drawable.rounded_priority_search);

ivCoditionTip1.setBackgroundResource(R.drawable.priority_search_down);

ivCoditionTip2.setBackgroundResource(R.drawable.priority_search_up);

ivCoditionTip3.setBackgroundResource(R.drawable.priority_search_down);

ivCoditionTip4.setBackgroundResource(R.drawable.priority_search_down);

params22.setMargins((int) DisplayUtil.dip2px(SearchResultActivity.this, 18), 0, 0, 0);

params31.setMargins((int) DisplayUtil.dip2px(SearchResultActivity.this, 18), 0, 0, 0);

params41.setMargins((int) DisplayUtil.dip2px(SearchResultActivity.this, 18), 0, 0, 0);

llPriority1.setLayoutParams(params11);

llPriority2.setLayoutParams(params22);

llPriority3.setLayoutParams(params31);

llPriority4.setLayoutParams(params41);

break;

case 2:

v_line.setVisibility(View.VISIBLE);

llPriority1.setBackgroundResource(R.drawable.rounded_priority_search);

llPriority2.setBackgroundResource(R.drawable.rounded_priority_search);

llPriority3.setBackgroundResource(R.drawable.rounded_priority_search_selected);

llPriority4.setBackgroundResource(R.drawable.rounded_priority_search);

ivCoditionTip1.setBackgroundResource(R.drawable.priority_search_down);

ivCoditionTip2.setBackgroundResource(R.drawable.priority_search_down);

ivCoditionTip3.setBackgroundResource(R.drawable.priority_search_up);

ivCoditionTip4.setBackgroundResource(R.drawable.priority_search_down);

params21.setMargins((int) DisplayUtil.dip2px(SearchResultActivity.this, 18), 0, 0, 0);

params32.setMargins((int) DisplayUtil.dip2px(SearchResultActivity.this, 18), 0, 0, 0);

params41.setMargins((int) DisplayUtil.dip2px(SearchResultActivity.this, 18), 0, 0, 0);

llPriority1.setLayoutParams(params11);

llPriority2.setLayoutParams(params21);

llPriority3.setLayoutParams(params32);

llPriority4.setLayoutParams(params41);

break;

case 3:

v_line.setVisibility(View.VISIBLE);

llPriority1.setBackgroundResource(R.drawable.rounded_priority_search);

llPriority2.setBackgroundResource(R.drawable.rounded_priority_search);

llPriority3.setBackgroundResource(R.drawable.rounded_priority_search);

llPriority4.setBackgroundResource(R.drawable.rounded_priority_search_selected);

ivCoditionTip1.setBackgroundResource(R.drawable.priority_search_down);

ivCoditionTip2.setBackgroundResource(R.drawable.priority_search_down);

ivCoditionTip3.setBackgroundResource(R.drawable.priority_search_down);

ivCoditionTip4.setBackgroundResource(R.drawable.priority_search_up);

params21.setMargins((int) DisplayUtil.dip2px(SearchResultActivity.this, 18), 0, 0, 0);

params31.setMargins((int) DisplayUtil.dip2px(SearchResultActivity.this, 18), 0, 0, 0);

params42.setMargins((int) DisplayUtil.dip2px(SearchResultActivity.this, 18), 0, 0, 0);

llPriority1.setLayoutParams(params11);

llPriority2.setLayoutParams(params21);

llPriority3.setLayoutParams(params31);

llPriority4.setLayoutParams(params42);

break;

case 4:

v_line.setVisibility(View.GONE);

llPriority1.setBackgroundResource(R.drawable.rounded_priority_search);

llPriority2.setBackgroundResource(R.drawable.rounded_priority_search);

llPriority3.setBackgroundResource(R.drawable.rounded_priority_search);

llPriority4.setBackgroundResource(R.drawable.rounded_priority_search);

ivCoditionTip1.setBackgroundResource(R.drawable.priority_search_down);

ivCoditionTip2.setBackgroundResource(R.drawable.priority_search_down);

ivCoditionTip3.setBackgroundResource(R.drawable.priority_search_down);

ivCoditionTip4.setBackgroundResource(R.drawable.priority_search_down);

params21.setMargins((int) DisplayUtil.dip2px(SearchResultActivity.this, 18), 0, 0, 0);

params31.setMargins((int) DisplayUtil.dip2px(SearchResultActivity.this, 18), 0, 0, 0);

params41.setMargins((int) DisplayUtil.dip2px(SearchResultActivity.this, 18), 0, 0, 0);

llPriority1.setLayoutParams(params11);

llPriority2.setLayoutParams(params21);

llPriority3.setLayoutParams(params31);

llPriority4.setLayoutParams(params41);

break;

}

}

(4)PopupWindow逻辑

package com.sanweidu.TddPay.activity.trader.search;

import java.util.ArrayList;

import com.sanweidu.TddPay.R;

import com.sanweidu.TddPay.adapter.CoditionAdapter;

import com.sanweidu.TddPay.bean.ValueBean;

import android.app.Activity;

import android.content.SharedPreferences;

import android.content.SharedPreferences.Editor;

import android.graphics.drawable.BitmapDrawable;

import android.view.KeyEvent;

import android.view.LayoutInflater;

import android.view.MotionEvent;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.View.OnKeyListener;

import android.view.View.OnTouchListener;

import android.view.ViewGroup.LayoutParams;

import android.view.WindowManager;

import android.widget.Button;

import android.widget.GridView;

import android.widget.PopupWindow;

/**

* 优先搜索弹窗

* @Description

* @author XiongJie

* @date 2016年11月2日 下午4:53:31

*/

public class PriorityPopupWindow extends PopupWindow {

/**布局加载器**/

private LayoutInflater inflater;

/** 上下文 **/

private Activity activity;

/** PopupWindow对象 **/

public PopupWindow popupWindow = null;

/**优先筛选条件列表**/

private GridView gvCoditionList;

/** 判断gridview是否进行滚动事件 **/

protected boolean isScroll = false;

/** 绑定显示视图的view **/

protected View view = null;

/**属性值列表**/

private ArrayList valueBeanList;

/**适配器**/

private CoditionAdapter coditionAdapter;

/**重置**/

private Button btReset;

/**确认**/

private Button btConfirm;

/**优先筛选**/

private SharedPreferences priorityPre;

/**搜索类型**/

private int searchType;

/**弹窗阴影部分**/

private View vBg;

/**构造方法**/

public PriorityPopupWindow(){

}

/**初始化弹窗界面**/

public void initPopupWindow(final Activity activity, View view, int layoutID,ArrayList valueBeanList,final SharedPreferences priorityPre,final int searchType){

this.view = view;

this.activity = activity;

this.valueBeanList = valueBeanList;

this.priorityPre = priorityPre;

this.searchType = searchType;

inflater = LayoutInflater.from(activity);

View dialogView = inflater.inflate(layoutID, null);

createPopupWindow(dialogView);

popupWindow = new PopupWindow(dialogView, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);

// 此处必须设置,否则点击事件无效,选择不了

popupWindow.setBackgroundDrawable(new BitmapDrawable());

// 设置显示动画

// popupWindow.setAnimationStyle(R.style.PopupWindowAinmation);

// 设置边缘点击可消失

popupWindow.setOutsideTouchable(true);

// 设置pop出来后,软键盘的属性,避免pop挡住软键盘,以及pop获取焦点后软键盘会自动隐藏问题

popupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

// 使用该属性时,在滑动pop的时候不会自动弹出软键盘

popupWindow.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);

// 为了设置返回按钮关闭弹层

popupWindow.setFocusable(true);

dialogView.setOnKeyListener(new OnKeyListener() {

@Override

public boolean onKey(View v, int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_BACK) {

hidden();

popupWindow.setFocusable(false);

popupWindow.update();

return true; // 消费掉该事件

}

return false;

}

});

/**

* PopupWindow消失时事件

*/

// popupWindow.setOnDismissListener(new OnDismissListener() {

// @Override

// public void onDismiss() {

// //还原优先筛选控件显示状态

// if(activity instanceof SearchResultActivity){

// ((SearchResultActivity)activity).setSelectState(4);

// }

//

// if(null != priorityPre){

// boolean isClickConfirm = priorityPre.getBoolean("isClickConfirm", false);

// Editor editor = priorityPre.edit();

// editor.putInt("searchType", searchType);

// editor.putBoolean("isClickConfirm", isClickConfirm);

// editor.commit();

// }

// hidden();

// popupWindow.setFocusable(false);

// popupWindow.update();

// }

// });

// 手触碰到pop时,获取焦点,以实现点击事件

popupWindow.setTouchInterceptor(new OnTouchListener() {

public boolean onTouch(View v, MotionEvent event) {

// 刚进入pop界面,listveiw滚动标识设为false,pop界面焦点设为true。

isScroll = false;

popupWindow.setFocusable(true);

popupWindow.update();

return false;

}

});

}

/**

* 创建弹窗

* @Description

* @author XiongJie

* @param dialogView

*/

private void createPopupWindow(View dialogView){

initView(dialogView);

initData();

setListener();

}

/**

* @Description 初始化界面控件

* @author XiongJie

* @param dialogView

*/

private void initView(View dialogView) {

gvCoditionList = (GridView) dialogView.findViewById(R.id.gv_codition_list);

btReset = (Button) dialogView.findViewById(R.id.bt_reset);

btConfirm = (Button) dialogView.findViewById(R.id.bt_confirm);

vBg = dialogView.findViewById(R.id.v_bg);

}

/**

* @Description 初始化数据

* @author XiongJie

*/

public void initData() {

coditionAdapter = new CoditionAdapter(activity,gvCoditionList);

coditionAdapter.setData(valueBeanList);

gvCoditionList.setAdapter(coditionAdapter);

btConfirm.setBackgroundColor(activity.getResources().getColor(R.color.c_d82828));

}

/**

* @Description 事件处理

* @author XiongJie

*/

private void setListener() {

btReset.setOnClickListener(new ViewClickListener());

btConfirm.setOnClickListener(new ViewClickListener());

vBg.setOnClickListener(new ViewClickListener());

}

/**

* 返回当前popupWindow是否显示状态

*/

public boolean hasShowing() {

return null == popupWindow ? false : popupWindow.isShowing();

}

/**

* 显示PopupWindow界面

*/

public void show() {

if (hasShowing()) {

return;

}

if (null != activity && !activity.isFinishing()) {

if (null == view) {

view = activity.getWindow().getDecorView();

}

popupWindow.showAsDropDown(view);

}

}

/**

* 隐藏PopupWindow界面

*/

public void hidden() {

if (null == popupWindow) {

return;

}

popupWindow.dismiss();

}

/**

* 按钮点击事件

* @Description

* @author XiongJie

* @date 2016年11月6日 下午4:12:27

*/

class ViewClickListener implements OnClickListener{

@Override

public void onClick(View v) {

switch(v.getId()){

case R.id.bt_reset:

//重置

if(null != valueBeanList && valueBeanList.size() > 0){

for(ValueBean valueBean : valueBeanList){

valueBean.setIsChoose("1002");

}

coditionAdapter.setData(valueBeanList);

}

break;

case R.id.bt_confirm:

//确认

Editor editor = priorityPre.edit();

editor.putInt("searchType", searchType);

editor.putBoolean("isClickConfirm", true);

editor.commit();// 提交修改

hidden();

break;

case R.id.v_bg:

hidden();

break;

}

}

}

/**

* 获取PopupWindow对象

* @Description

* @author XiongJie

* @return

*/

public PopupWindow getPopupWindow() {

return popupWindow;

}

}

希望本文所述对大家Android程序设计有所帮助。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值