模拟QQDialog底部弹出

先上效果图

此图借鉴了可可DJ音乐网


2、编写布局


android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="vertical"

android:padding="8dp" >

android:id="@+id/txt_title"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="@drawable/actionsheet_top_normal"

android:gravity="center"

android:minHeight="45dp"

android:paddingTop="10dp"

android:paddingBottom="10dp"

android:paddingLeft="15dp"

android:paddingRight="15dp"

android:textColor="@color/actionsheet_gray"

android:textSize="13sp"

android:visibility="gone" />

android:id="@+id/sLayout_content"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:fadingEdge="none"

>

android:id="@+id/lLayout_content"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="vertical" >

android:id="@+id/txt_cancel"

android:layout_width="match_parent"

android:layout_height="45dp"

android:layout_marginTop="8dp"

android:background="@drawable/alertdialog_single_selector"

android:gravity="center"

android:text="取消"

android:textColor="#037BFF"

android:textSize="18sp"

android:textStyle="bold" />

3、主要代码

package com.luobo.app.widget;

import java.util.ArrayList;

import java.util.List;

import com.luobo.app.R;

import android.app.Dialog;

import android.content.Context;

import android.graphics.Color;

import android.view.Display;

import android.view.Gravity;

import android.view.LayoutInflater;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.Window;

import android.view.WindowManager;

import android.widget.LinearLayout;

import android.widget.LinearLayout.LayoutParams;

import android.widget.ScrollView;

import android.widget.TextView;

public class ActionSheetDialog {

private Context context;

private Dialog dialog;

private TextView txt_title;

private TextView txt_cancel;

private LinearLayout lLayout_content;

private ScrollView sLayout_content;

private boolean showTitle = false;

private List sheetItemList;

private Display display;

public ActionSheetDialog(Context context) {

this.context = context;

WindowManager windowManager = (WindowManager) context

.getSystemService(Context.WINDOW_SERVICE);

display = windowManager.getDefaultDisplay();

}

public ActionSheetDialog builder() {

// 获取Dialog布局

View view = LayoutInflater.from(context).inflate(

R.layout.view_actionsheet, null);

// 设置Dialog最小宽度为屏幕宽度

view.setMinimumWidth(display.getWidth());

// 获取自定义Dialog布局中的控件

sLayout_content = (ScrollView) view.findViewById(R.id.sLayout_content);

lLayout_content = (LinearLayout) view

.findViewById(R.id.lLayout_content);

txt_title = (TextView) view.findViewById(R.id.txt_title);

txt_cancel = (TextView) view.findViewById(R.id.txt_cancel);

txt_cancel.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

//dialog.dismiss();

}

});

// 定义Dialog布局和参数

dialog = new Dialog(context, R.style.ActionSheetDialogStyle);

dialog.setContentView(view);

Window dialogWindow = dialog.getWindow();

dialogWindow.setGravity(Gravity.LEFT | Gravity.BOTTOM);

WindowManager.LayoutParams lp = dialogWindow.getAttributes();

lp.x = 0;

lp.y = 0;

dialogWindow.setAttributes(lp);

return this;

}

public ActionSheetDialog setTitle(String title) {

showTitle = true;

txt_title.setVisibility(View.VISIBLE);

txt_title.setText(title);

return this;

}

public ActionSheetDialog setCancelable(boolean cancel) {

dialog.setCancelable(cancel);

return this;

}

public ActionSheetDialog setCanceledOnTouchOutside(boolean cancel) {

dialog.setCanceledOnTouchOutside(cancel);

return this;

}

/**

*

* @param strItem

*            条目名称

* @param color

*            条目字体颜色,设置null则默认蓝色

* @param listener

* @return

*/

public ActionSheetDialog addSheetItem(String strItem, SheetItemColor color,

OnSheetItemClickListener listener) {

if (sheetItemList == null) {

sheetItemList = new ArrayList();

}

sheetItemList.add(new SheetItem(strItem, color, listener));

return this;

}

/** 设置条目布局 */

private void setSheetItems() {

if (sheetItemList == null || sheetItemList.size() <= 0) {

return;

}

int size = sheetItemList.size();

// TODO 高度控制,非最佳解决办法

// 添加条目过多的时候控制高度

if (size >= 7) {

LinearLayout.LayoutParams params = (LayoutParams) sLayout_content

.getLayoutParams();

params.height = display.getHeight() / 2;

sLayout_content.setLayoutParams(params);

}

// 循环添加条目

for (int i = 1; i <= size; i++) {

final int index = i;

SheetItem sheetItem = sheetItemList.get(i - 1);

String strItem = sheetItem.name;

SheetItemColor color = sheetItem.color;

final OnSheetItemClickListener listener = (OnSheetItemClickListener) sheetItem.itemClickListener;

TextView textView = new TextView(context);

textView.setText(strItem);

textView.setTextSize(18);

textView.setGravity(Gravity.CENTER);

// 背景图片

if (size == 1) {

if (showTitle) {

textView.setBackgroundResource(R.drawable.actionsheet_bottom_selector);

} else {

textView.setBackgroundResource(R.drawable.actionsheet_single_selector);

}

} else {

if (showTitle) {

if (i >= 1 && i < size) {

textView.setBackgroundResource(R.drawable.actionsheet_middle_selector);

} else {

textView.setBackgroundResource(R.drawable.actionsheet_bottom_selector);

}

} else {

if (i == 1) {

textView.setBackgroundResource(R.drawable.actionsheet_top_selector);

} else if (i < size) {

textView.setBackgroundResource(R.drawable.actionsheet_middle_selector);

} else {

textView.setBackgroundResource(R.drawable.actionsheet_bottom_selector);

}

}

}

// 字体颜色

if (color == null) {

textView.setTextColor(Color.parseColor(SheetItemColor.Blue

.getName()));

} else {

textView.setTextColor(Color.parseColor(color.getName()));

}

// 高度

float scale = context.getResources().getDisplayMetrics().density;

int height = (int) (45 * scale + 0.5f);

textView.setLayoutParams(new LinearLayout.LayoutParams(

LayoutParams.MATCH_PARENT, height));

// 点击事件

textView.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

listener.onClick(index);

dialog.dismiss();

}

});

lLayout_content.addView(textView);

}

}

public void show() {

setSheetItems();

dialog.show();

}

public interface OnSheetItemClickListener {

void onClick(int which);

}

public class SheetItem {

String name;

OnSheetItemClickListener itemClickListener;

SheetItemColor color;

public SheetItem(String name, SheetItemColor color,

OnSheetItemClickListener itemClickListener) {

this.name = name;

this.color = color;

this.itemClickListener = itemClickListener;

}

}

public enum SheetItemColor {

Blue("#037BFF"), Red("#FD4A2E");

private String name;

private SheetItemColor(String name) {

this.name = name;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

}

用了他家的图,怎么说也要回馈一下他吧,送上链接一条,表示尊敬。

是不是“”干货",就看你怎么想了,我觉得慢慢的回忆感

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,327评论 0 17
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,045评论 25 707
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,360评论 2 44
  • 云计算,英文单词是Cloud Computing ,顾名思义,在云的平台进行处理计算。拿到刘鹏老师著作的云计算第...
    IFBUT阅读 274评论 0 2
  • 昨日与今日在福州开办《打造高绩效团队》公开课,这是在福州开办的团队教练首期新课,做课前准备的时候,很是期待,前两次...
    特舒阅读 159评论 0 1