每日学习之0506

做一个Acitivity 蒙层

1.Activity全透明

同学zzm给了这个有趣的代码,现在公布出来。

先在res/values下建colors.xml文件,写入:  

<? xml version = "1.0" encoding = "UTF-8" ?>    
<resources>    
    <color   name = "transparent"> #9000 </color>    
</resources>

这个值设定了整个界面的透明度,为了看得见效果,现在设为透明度为56%(9/16)左右。

再在res/values/下建styles.xml,设置程序的风格

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="Transparent"> 
        <item name="android:windowBackground">@color/transparent</item> 
        <item name="android:windowIsTranslucent">true</item>    
        <item name="android:windowAnimationStyle">@+android:style/Animation.Translucent</item> 
    </style> 
</resources>

最后一步,把这个styles.xml用在相应的Activity上。即在AndroidManifest.xml中的任意<activity>标签中添加 android:theme = "@style/transparent"

如果想设置所有的activity都使用这个风格,可以把这句标签语句添加在<application>中。

最后运行程序,哈哈,是不是发现整个界面都被蒙上一层半透明了。最后可以把背景色#9000换成#0000,运行程序后,就全透明了,看得见背景下的所有东西可以却都操作无效。呵呵....

2.Dialog全透明

1.准备保留边框的全透明素材如下图:

transparent

2.在values中新建一styles.xml文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <style name="TANCStyle" parent="@android:style/Theme.Dialog">
        <!-- 更换背景图片实现全透明 -->
        <item name="android:windowBackground">@drawable/panel_background_sodino1</item>
        <!-- 屏幕背景不变暗 -->
        <item name="android:backgroundDimEnabled">false</item>
        <!-- 更改对话框标题栏 -->
        <item name="android:windowTitleStyle">@style/TitleStyle</item>
    </style>
    <style name="TitleStyle" parent="@android:style/DialogWindowTitle">
        <item name="android:textAppearance">@style/TitleText</item>
    </style>
    <style name="TitleText" parent="@android:style/TextAppearance.DialogWindowTitle">
        <!-- 设置Dialog标题栏文字颜色。 -->
        <item name="android:textColor">#000</item>
    </style>
</resources>

3.在layout文件夹下新建一文件句为main_dialog.xml,内容如下:

<?xml version="1.0" encoding="UTF-8"?>  
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:background="#0000">  
    <ScrollView android:id="@+id/ScrollView01"  
        android:layout_width="wrap_content"  
        android:layout_height="200px"  
        android:layout_below="@+id/ImageView01"  
        android:background="#0000">  
        <TextView android:id="@+id/TextView01"  
            android:text="SodinoText"  
            android:textColor="#f000"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:background="#0000"  
        ></TextView>  
    </ScrollView>  
    <Button android:id="@+id/btnCancel"  
        android:layout_below="@id/ScrollView01"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_centerHorizontal="true"  
        android:text="Cancel">  
    </Button>  
</RelativeLayout> 

4.Activity代码如下:

package lab.sodino.tanc;  
import android.app.Activity;  
import android.app.Dialog;  
import android.os.Bundle;  
import android.view.View;  
import android.widget.Button;  
import android.widget.TextView;  
public class TANCAct extends Activity {  
    /** Called when the activity is first created. */  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        Button btnShow = (Button) findViewById(R.id.btnShow);  
        btnShow.setOnClickListener(new Button.OnClickListener() {  
            public void onClick(View view) {  
                showTANC(  
                        "This is my custom dialog box",  
                        "TextContent/nWhen a dialog is requested for the first time, Android calls onCreateDialog(int)  from your Activity, which is where you should instantiate the Dialog. This callback method is passed the same ID that you passed to showDialog(int). After you create the Dialog, return the object at the end of the method.",  
                        "http://blog.csdn.net/sodino");  
            }  
        });  
    }  
    private void showTANC(String header, String content, String url) {  
        final Dialog dialog = new Dialog(this, R.style.TANCStyle);  
        dialog.setContentView(R.layout.main_dialog);  
        dialog.setTitle(header);  
        dialog.setCancelable(true);  
        TextView textView01 = (TextView) dialog.findViewById(R.id.TextView01);  
        textView01.setText(content + content + content);  
        Button btnCancel = (Button) dialog.findViewById(R.id.btnCancel);  
        btnCancel.setOnClickListener(new Button.OnClickListener() {  
            public void onClick(View view) {  
                dialog.cancel();  
            }  
        });  
        dialog.show();  
    }  
}  

最后效果图:

transparent

实现各种形式的Dialog

app中肯定是少不了与用户交互的各种dialog,。 这里,总结了常用的9种dialog的实现方法。

   

 

除了popupwindow实现稍微麻烦一点,其他形似都相对简单,熟悉2便即可

直接上源码

package com.naoh.stu;

import java.util.ArrayList;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.PopupWindow;
import android.widget.Toast;

public class DiaAllActivity extends Activity implements Runnable {
	private Button btn_diaNormal; 
	private Button btn_diaMulti;
	private Button btn_diaList;
	private Button btn_diaSinChos;
	private Button btn_diaMultiChos;
	private Button btn_diaProcess;
	private Button btn_diaReadProcess;
	private Button btn_diaCustom;
	private Button btn_popUpDia;
	
	private PopupWindow window=null;
	private Button cusPopupBtn1;
	private View popupView;

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.dialog);
		getView();
		setListener();
	}
	
	private void getView()
	{
		btn_diaNormal=(Button)findViewById(R.id.btn_diaNormal);
		btn_diaMulti=(Button)findViewById(R.id.btn_diaMulti);
		btn_diaList=(Button)findViewById(R.id.btn_diaList);
		btn_diaSinChos=(Button)findViewById(R.id.btn_diaSigChos);
		btn_diaMultiChos=(Button)findViewById(R.id.btn_diaMultiChos);
		btn_diaProcess=(Button)findViewById(R.id.btn_diaProcess);
		btn_diaReadProcess=(Button)findViewById(R.id.btn_diaReadProcess);
		btn_diaCustom=(Button)findViewById(R.id.btn_diaCustom);
		btn_popUpDia=(Button)findViewById(R.id.btn_popUpDia);
		
	}
	
	private void setListener()
	{
		btn_diaNormal.setOnClickListener(btnListener);
		btn_diaMulti.setOnClickListener(btnListener);
		btn_diaList.setOnClickListener(btnListener);
		btn_diaSinChos.setOnClickListener(btnListener);
		btn_diaMultiChos.setOnClickListener(btnListener);
		btn_diaProcess.setOnClickListener(btnListener);
		btn_diaReadProcess.setOnClickListener(btnListener);
		btn_diaCustom.setOnClickListener(btnListener);
		btn_popUpDia.setOnClickListener(btnListener);
	}
	
	private Button.OnClickListener btnListener= new Button.OnClickListener()
	{
		public void onClick(View v)
		{
			if(v instanceof Button)
			{
				int btnId=v.getId();
				switch(btnId)
				{
					case R.id.btn_diaNormal:
						showNormalDia();
						break;
					case R.id.btn_diaMulti:
						showMultiDia();
						break;
					case R.id.btn_diaList:
						showListDia();
						break;
					case R.id.btn_diaSigChos:
						showSinChosDia();
						break;
					case R.id.btn_diaMultiChos:
						showMultiChosDia();
						break;
					case R.id.btn_diaReadProcess:
						showReadProcess();
						break;
					case R.id.btn_diaProcess:
						showProcessDia();
						break;
					case R.id.btn_diaCustom:
						showCustomDia();
						break;
					case R.id.btn_popUpDia:
						showCusPopUp(v);
						break;
					default:
						break;
				}
			}
		}
	};

	/*普通的对话框*/
	private void showNormalDia()
	{
		//AlertDialog.Builder normalDialog=new AlertDialog.Builder(getApplicationContext());
		AlertDialog.Builder normalDia=new AlertDialog.Builder(DiaAllActivity.this);
		normalDia.setIcon(R.drawable.ic_launcher);
		normalDia.setTitle("普通的对话框");
		normalDia.setMessage("普通对话框的message内容");
		
		normalDia.setPositiveButton("确定", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				showClickMessage("确定");
			}
		});
		normalDia.setNegativeButton("取消", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				showClickMessage("取消");
			}
		});
		normalDia.create().show();
	}
	
	/*多按钮对话框*/
	private void showMultiDia()
	{
		AlertDialog.Builder multiDia=new AlertDialog.Builder(DiaAllActivity.this);
		multiDia.setTitle("多选项对话框");
		multiDia.setPositiveButton("按钮一", new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				showClickMessage("按钮一");
			}
		});
		multiDia.setNeutralButton("按钮二", new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				showClickMessage("按钮二");
			}
		});
		multiDia.setNegativeButton("按钮三", new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				showClickMessage("按钮三");
			}
		});
		multiDia.create().show();
	}
	
	
	/*列表对话框*/
	private void showListDia()
	{
		final String[] mList={"选项1","选项2","选项3","选项4","选项5","选项6","选项7"};
		AlertDialog.Builder listDia=new AlertDialog.Builder(DiaAllActivity.this);
		listDia.setTitle("列表对话框");
		listDia.setItems(mList, new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				/*下标是从0开始的*/
				showClickMessage(mList[which]);
			}
		});
		listDia.create().show();
	}
	
	/*单项选择对话框*/
	int yourChose=-1;
	private void showSinChosDia()
	{
		final String[] mList={"选项1","选项2","选项3","选项4","选项5","选项6","选项7"};
		yourChose=-1;
		AlertDialog.Builder sinChosDia=new AlertDialog.Builder(DiaAllActivity.this);
		sinChosDia.setTitle("单项选择对话框");
		sinChosDia.setSingleChoiceItems(mList, 0, new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				yourChose=which;
				
			}
		});
		sinChosDia.setPositiveButton("确定", new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				if(yourChose!=-1)
				{
					showClickMessage(mList[yourChose]);
				}
			}
		});
		sinChosDia.create().show();
	}

	ArrayList<Integer> myChose= new ArrayList<Integer>();
	private void showMultiChosDia()
	{
		final String[] mList={"选项1","选项2","选项3","选项4","选项5","选项6","选项7"};
		final boolean mChoseSts[]={false,false,false,false,false,false,false};
		myChose.clear();
		AlertDialog.Builder multiChosDia=new AlertDialog.Builder(DiaAllActivity.this);
		multiChosDia.setTitle("多项选择对话框");
		multiChosDia.setMultiChoiceItems(mList, mChoseSts, new DialogInterface.OnMultiChoiceClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which, boolean isChecked) {
				// TODO Auto-generated method stub
				if(isChecked)
				{
					myChose.add(which);
				}
				else
				{
					myChose.remove(which);
				}
			}
		});
		multiChosDia.setPositiveButton("确定", new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				int size=myChose.size();
				String str="";
				for(int i=0;i<size;i++)
				{
					str+=mList[myChose.get(i)];
				}
				showClickMessage(str);
			}
		});
		multiChosDia.create().show();
	}
	
	//进度读取框需要模拟读取
	ProgressDialog mReadProcessDia=null;
	public final static int MAX_READPROCESS = 100;
	private void showReadProcess()
	{
		mReadProcessDia=new ProgressDialog(DiaAllActivity.this);
		mReadProcessDia.setProgress(0);
		mReadProcessDia.setTitle("进度条窗口");
		mReadProcessDia.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
		mReadProcessDia.setMax(MAX_READPROCESS);
		mReadProcessDia.show();
		new Thread(this).start();
	}
	
	//新开启一个线程,循环的累加,一直到100然后在停止
	@Override
	public void run()
	{
		int Progress= 0;
		while(Progress < MAX_READPROCESS)
		{
			try {
				Thread.sleep(100);
				Progress++;
				mReadProcessDia.incrementProgressBy(1);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		//读取完了以后窗口自消失
		mReadProcessDia.cancel();
	}
	
	/*读取中的对话框*/
	private void showProcessDia()
	{
		ProgressDialog processDia= new ProgressDialog(DiaAllActivity.this);
		processDia.setTitle("进度条框");
		processDia.setMessage("内容读取中...");
		processDia.setIndeterminate(true);
		processDia.setCancelable(true);
		processDia.show();
	}
	
	/*自定义对话框*/
	private void showCustomDia()
	{
		AlertDialog.Builder customDia=new AlertDialog.Builder(DiaAllActivity.this);
		final View viewDia=LayoutInflater.from(DiaAllActivity.this).inflate(R.layout.custom_dialog, null);
		customDia.setTitle("自定义对话框");
		customDia.setView(viewDia);
		customDia.setPositiveButton("确定", new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				EditText diaInput=(EditText) viewDia.findViewById(R.id.txt_cusDiaInput);
				showClickMessage(diaInput.getText().toString());
			}
		});
		customDia.create().show();
	}
	
	/*popup window 来实现*/
	private void showCusPopUp(View parent)
	{
		if(window == null)
		{
			popupView=LayoutInflater.from(DiaAllActivity.this).inflate(R.layout.dia_cuspopup_dia, null);
			cusPopupBtn1=(Button)popupView.findViewById(R.id.diaCusPopupSure);
			window =new PopupWindow(popupView,LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
		}
		window.setAnimationStyle(R.style.PopupAnimation);
		/*必须调用setBackgroundDrawable, 因为popupwindow在初始时,会检测background是否为null,如果是onTouch or onKey events就不会相应,所以必须设置background*/
		/*网上也有很多人说,弹出pop之后,不响应键盘事件了,这个其实是焦点在pop里面的view去了。*/
		window.setFocusable(true);
		window.setBackgroundDrawable(new BitmapDrawable()); 
		window.update();
		window.showAtLocation(parent, Gravity.CENTER_VERTICAL, 0, 0);
		cusPopupBtn1.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				showClickMessage("popup window的确定");
			}
		});
	}
	
	/*显示点击的内容*/
	private void showClickMessage(String message)
	{
		Toast.makeText(DiaAllActivity.this, "你选择的是: "+message, Toast.LENGTH_SHORT).show();
	}
}


布局,就是一堆的button

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="各种Dialog合集" />
	<Button 
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="普通Dialog"
	    android:id="@+id/btn_diaNormal"/>
	
	<Button 
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="多按钮Dialog"
	    android:id="@+id/btn_diaMulti"/>
	
	<Button 
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="列表Dialog"
	    android:id="@+id/btn_diaList"/>
	
	<Button 
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="单项选择Dialog"
	    android:id="@+id/btn_diaSigChos"/>
	
	<Button 
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="多项选择Dialog"
	    android:id="@+id/btn_diaMultiChos"/>
	
	<Button 
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="进度条Dialog"
	    android:id="@+id/btn_diaReadProcess"/>
	
	<Button 
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="读取中Dialog"
	    android:id="@+id/btn_diaProcess"/>
	
	<Button 
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="自定义Dialog"
	    android:id="@+id/btn_diaCustom"/>
	
	<Button 
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="PopUpWindow实现的dialog"
	    android:id="@+id/btn_popUpDia"/>
</LinearLayout>


 

原文地址:https://www.cnblogs.com/zhanglanyun/p/3063015.html