实现类似iOS中的UIActionSheet效果
本文只列出核心实现代码,具体实现请参考附件。
布局如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/transparent" android:orientation="vertical" android:padding="5dp" > <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/actionsheet_top_normal" android:gravity="center" android:text="@string/title" android:textColor="#8F8F8F" android:textSize="16sp" /> <TextView android:id="@+id/smallTextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/actionsheet_middle_selector" android:gravity="center" android:text="@string/small" android:textColor="#000000" android:textSize="16sp" /> <TextView android:id="@+id/middleTextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/actionsheet_middle_selector" android:gravity="center" android:text="@string/middle" android:textColor="#000000" android:textSize="16sp" /> <TextView android:id="@+id/bigTextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/actionsheet_bottom_selector" android:gravity="center" android:text="@string/big" android:textColor="#000000" android:textSize="16sp" /> <TextView android:id="@+id/cancel" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:background="@drawable/actionsheet_single_selector" android:gravity="center" android:text="@string/cancel" android:textColor="#037BFF" android:textSize="16sp" /> </LinearLayout>
具体实现如下:
package com.eric.actionsheet; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface.OnCancelListener; 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.TextView; public class ActionSheet { public interface OnActionSheetSelected { void onClick(int whichButton); } private ActionSheet() { } public static Dialog showSheet(Context context,final OnActionSheetSelected actionSheetSelected,OnCancelListener cancelListener) { final Dialog dlg = new Dialog(context, R.style.ActionSheet); LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.actionsheet, null); final int cFullFillWidth = 10000; layout.setMinimumWidth(cFullFillWidth); TextView smallContent = (TextView) layout.findViewById(R.id.smallTextView); TextView middleContent = (TextView) layout.findViewById(R.id.middleTextView); TextView bigContent = (TextView) layout.findViewById(R.id.bigTextView); TextView mCancel = (TextView) layout.findViewById(R.id.cancel); smallContent.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub actionSheetSelected.onClick(0); dlg.dismiss(); } }); middleContent.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub actionSheetSelected.onClick(1); dlg.dismiss(); } }); bigContent.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub actionSheetSelected.onClick(2); dlg.dismiss(); } }); mCancel.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub actionSheetSelected.onClick(3); dlg.dismiss(); } }); Window w = dlg.getWindow(); WindowManager.LayoutParams lp = w.getAttributes(); lp.x = 0; final int cMakeBottom = -1000; lp.y = cMakeBottom; lp.gravity = Gravity.BOTTOM; dlg.onWindowAttributesChanged(lp); dlg.setCanceledOnTouchOutside(false); if (cancelListener != null) dlg.setOnCancelListener(cancelListener); dlg.setContentView(layout); dlg.show(); return dlg; } }
调用示例:
ActionSheet.showSheet(MainActivity.this, MainActivity.this, MainActivity.this);
相关推荐
huha 2020-10-16
xfcyhades 2020-11-20
sgafdsg 2020-11-04
Michael 2020-11-03
fengyeezju 2020-10-14
ziyexiaoxiao 2020-10-14
业余架构师 2020-10-09
OuNuo0 2020-09-29
moses 2020-09-22
Angelia 2020-09-11
qinxu 2020-09-10
刘炳昭 2020-09-10
Nostalgiachild 2020-09-07
Nostalgiachild 2020-08-17
leavesC 2020-08-14
一青年 2020-08-13
AndroidAiStudy 2020-08-07
ydc0 2020-07-30
绿豆饼 2020-07-28