模擬QQDialog底部彈出

先上效果圖

此圖借鑒了可可DJ音樂網(wǎng)


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布局和參數(shù)

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);

}

// 循環(huán)添加條目

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;

}

}

}

用了他家的圖盗誊,怎么說也要回饋一下他吧覆享,送上鏈接一條,表示尊敬狸页。

是不是“”干貨",就看你怎么想了,我覺得慢慢的回憶感

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芍耘,一起剝皮案震驚了整個濱河市址遇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌斋竞,老刑警劉巖倔约,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異坝初,居然都是意外死亡浸剩,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門鳄袍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绢要,“玉大人,你說我怎么就攤上這事畦木⌒淇福” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵十籍,是天一觀的道長蛆封。 經(jīng)常有香客問我,道長勾栗,這世上最難降的妖魔是什么惨篱? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮围俘,結果婚禮上砸讳,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布蚤认。 她就那樣靜靜地躺著晴氨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機與錄音克胳,去河邊找鬼。 笑死圈匆,一個胖子當著我的面吹牛漠另,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播跃赚,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼笆搓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起砚作,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤窘奏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后葫录,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體着裹,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年米同,在試婚紗的時候發(fā)現(xiàn)自己被綠了骇扇。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡面粮,死狀恐怖少孝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情熬苍,我是刑警寧澤稍走,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站柴底,受9級特大地震影響婿脸,放射性物質發(fā)生泄漏。R本人自食惡果不足惜柄驻,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一狐树、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鸿脓,春花似錦抑钟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至拨黔,卻和暖如春蛔溃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蓉驹。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留揪利,地道東北人态兴。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像疟位,于是被迫代替她去往敵國和親瞻润。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 6,424評論 0 17
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,167評論 25 707
  • afinalAfinal是一個android的ioc绍撞,orm框架 https://github.com/yangf...
    passiontim閱讀 15,434評論 2 45
  • 云計算正勒,英文單詞是Cloud Computing ,顧名思義傻铣,在云的平臺進行處理計算章贞。拿到劉鵬老師著作的云計算第...
    IFBUT閱讀 288評論 0 2
  • 昨日與今日在福州開辦《打造高績效團隊》公開課,這是在福州開辦的團隊教練首期新課非洲,做課前準備的時候鸭限,很是期待,前兩次...
    特舒閱讀 160評論 0 1