实现类似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);

相关推荐
xfcyhades 2020-11-20
Michael 2020-11-03
业余架构师 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