`
jsntghf
  • 浏览: 2527247 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

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

 

分享到:
评论
1 楼 alec03711 2014-07-02  

相关推荐

    安卓IOS风格相关-模仿IOS里面的UIActionSheet控件.rar

    "安卓IOS风格相关-模仿IOS里面的UIActionSheet控件.rar"这个压缩包文件,显然提供了一种尝试在Android平台上实现类似iOS中UIActionSheet控件的方法。UIActionSheet是iOS系统中的一个组件,通常用于显示一系列可选...

    IOS应用源码——UIActionSheet 的美化效果.rar

    在iOS开发中,UIActionSheet是苹果提供的一种用于展示用户可以选择的多个操作的视图控件,通常在用户触发某种需要确认或者有多种选择的情况下出现。这个压缩包“IOS应用源码——UIActionSheet 的美化效果.rar”显然...

    iOS模仿系统UIActionSheet,自定义弹框

    在iOS开发中,UIActionSheet是苹果提供的一种用于展示用户可以选择的多个操作的视图,通常在用户需要进行一项或多向选择时出现。然而,原生的UIActionSheet控件存在一些限制,例如不支持自定义字体大小和颜色。鉴于...

    Android 仿iPhone UIActionSheet控件效果很好用

    在Android开发中,为了提供与iOS相似的用户体验,开发者经常需要实现类似iPhone的UI组件。在iOS中,UIActionSheet是一种常见的控件,用于展示一系列可供用户选择的选项,通常在底部弹出。而在Android中,我们可以...

    ios应用源码之仿uialertview和uiactionsheet的一个效果 2018127

    标题“ios应用源码之仿uialertview和uiactionsheet的一个效果”所提及的,就是这样的一个自定义实现。 `UIAlertController`和`UIActionSheet`在iOS 8之后被引入,替代了之前的`UIAlertView`和`UIActionSheet`,因为...

    仿UIAlertView和UIActionSheet的一个效果功能ios源码.rar

    通过研究这个源码,开发者不仅可以学习到如何实现类似UIAlertView和UIActionSheet的效果,还能了解到如何在组件被弃用后进行兼容性开发,这对于维护老项目或兼容旧版本iOS系统非常有价值。同时,这也是一种对苹果...

    IOS应用源码Demo-仿UIAlertView和UIActionSheet的一个效果-毕设学习.zip

    这个压缩包"IOS应用源码Demo-仿UIAlertView和UIActionSheet的一个效果-毕设学习.zip"提供了一个实例,帮助开发者了解如何在没有这些原生组件的情况下实现类似的功能。在iOS 8之后,UIAlertView和UIActionSheet已被...

    IOS应用源码——仿UIAlertView和UIActionSheet的一个效果.zip

    这个源码可能实现的是一种兼容旧API与新API的方式,或者是一个完全自定义的控件,以保持类似UIAlertView和UIActionSheet的用户体验,同时避免了使用已被弃用的API。开发者可能通过创建自定义视图,调整布局,设置...

    iOS效果的ActionSheet

    标题“iOS效果的ActionSheet”表明我们将讨论如何在iOS应用中实现类似`UIActionSheet`或`UIAlertController`的弹出式选择界面。这个标题暗示我们将探讨如何在低版本的iOS系统(如低于iOS 5)中也能实现这一功能,这...

    IOS 实现类似桌面删除应用程序的效果(长按 可编辑 删除)

    在iOS应用开发中,为了提供用户友好的交互体验,经常需要实现类似桌面删除应用程序的效果,即用户长按应用图标后可以进行编辑或删除操作。这种功能常见于许多自定义应用列表或者模仿iOS主屏幕的应用中。本文将详细...

    ios-多功能选择器,UIActionSheet,仿微信ActionSheet.zip

    在iOS开发中,UIActionSheet是一种常用的用户界面元素,它用于提供用户多个操作选项,通常在屏幕底部以半透明的视图形式呈现。这个压缩包"ios-多功能选择器,UIActionSheet,仿微信ActionSheet.zip"包含了一个自定义的...

    androi高仿IOS-actionsheet

    在Android开发中,为了提供与iOS相似的用户体验,开发者经常需要实现类似iOS的UI组件,其中之一就是`UIActionSheet`。在iOS中,`UIActionSheet`是一个用于展示多个选项供用户选择的弹出视图,通常在底部弹出,包含...

    SYActionSheetView:** SYActionSheetView实现了类似于UIActionSheet的效果,简单易用,完美支持IOS5.0及以上版本。 用法: SYActionSheetView *actv = [[SYActionSheetView alloc] initWithTitle

    SYActionSheetView实现了类似于UIActionSheet的效果,简单易用,完美支持IOS5.0及以上版本。 用法: SYActionSheetView *actv = [[SYActionSheetView alloc] initWithTitle:nil cancelButtonTitle:@"cancle" ...

    android 仿ios 下面弹出列表

    例如,`android-uiactionsheet`库就是一个很好的选择,它提供了直接在Android上使用类似iOS UIActionSheet的功能。只需添加依赖,然后调用库提供的方法,就可以快速创建和展示一个UIActionSheet。 在使用开源库时,...

    UIActionSheetDemo

    如果你需要在新版本的iOS上实现类似的效果,你需要使用`UIAlertController`并调整其样式以达到类似的目的。 总之,`UIActionSheetDemo`是一个很好的学习资源,它帮助开发者理解如何在旧版iOS上使用UIActionSheet,...

    IOS应用源码之弹出列表框效果 .rar

    通过深入研究这个源码,开发者可以学习到如何在iOS应用中实现弹出列表框效果,掌握如何自定义视图、处理用户输入以及创建动态的UI动画。这对于提升iOS开发技能非常有帮助,特别是对于那些想要优化用户界面体验的...

    ios应用源码之弹出列表框效果 2018127

    在iOS中,我们可以使用多种方法来实现弹出列表框的效果,例如使用UIActionSheet、UIAlertController,或者自定义视图。下面将详细介绍这些方法及其优缺点。 1. UIActionSheet(已弃用) 在iOS 8以前,...

    IOS应用源码Demo-超炫的弹出框选择列表效果-毕设学习.zip

    在iOS中,弹出框通常通过UIAlertController、UIActionSheet或自定义视图实现。UIAlertController提供了弹出警告或提示的功能,可以包含一个或多个按钮供用户选择。UIActionSheet已经废弃,但它是以前创建类似弹出框...

Global site tag (gtag.js) - Google Analytics