android的tabhost+RadioGroup+PopupWindow

根据网上的代码稍作修改了下,放着记录学习。

效果图如下:android的tabhost+RadioGroup+PopupWindow_第1张图片


主代码如下:

package com.andyidea.tabdemo;

import android.app.TabActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.CompoundButton;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.RadioButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.TabHost;
import android.widget.Toast;

public class MainTabActivity extends TabActivity implements
		OnCheckedChangeListener, OnClickListener
{

	private TabHost mTabHost;

	private Intent mAIntent;

	private Intent mBIntent;

	private Intent mCIntent;

	private Intent mDIntent;

	private Intent mEIntent;

	private PopupWindow mPopupWindow;

	private RadioButton mR1;

	private RadioButton mR2;

	private RadioButton mR3;

	private RadioButton mR4;

	private LinearLayout mLinearLayout1;

	private LinearLayout mLinearLayout2;

	private LinearLayout mLinearLayout3;

	private LinearLayout mLinearLayout4;

	private LinearLayout mLinearLayout5;

	/**
	 * 基准屏幕密度
	 */
	public double STANDARD_DENSITY = 160;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.maintabs);

		this.mAIntent = new Intent(this, AActivity.class);
		this.mBIntent = new Intent(this, BActivity.class);
		this.mCIntent = new Intent(this, CActivity.class);
		this.mDIntent = new Intent(this, DActivity.class);
		this.mEIntent = new Intent(this, EActivity.class);

		mR1 = ((RadioButton) findViewById(R.id.radio_button0));
		mR1.setOnCheckedChangeListener(this);
		mR2 = ((RadioButton) findViewById(R.id.radio_button1));
		mR2.setOnCheckedChangeListener(this);
		mR3 = ((RadioButton) findViewById(R.id.radio_button2));
		mR3.setOnCheckedChangeListener(this);
		mR4 = ((RadioButton) findViewById(R.id.radio_button3));
		mR4.setOnCheckedChangeListener(this);

		setupIntent();
		initPopupMenu();
	}

	private void initPopupMenu()
	{
		View mPopupMenu =
				LayoutInflater.from(this).inflate(R.layout.popupmenu, null);

		mPopupWindow =
				new PopupWindow(mPopupMenu, (int) (getDensityRatio() * 90),
						(int) (getDensityRatio() * 180));
		mLinearLayout1 = (LinearLayout) mPopupMenu.findViewById(R.id.zhanghao);
		mLinearLayout2 = (LinearLayout) mPopupMenu.findViewById(R.id.firav);
		mLinearLayout3 = (LinearLayout) mPopupMenu.findViewById(R.id.yijian);
		mLinearLayout4 = (LinearLayout) mPopupMenu.findViewById(R.id.abort);
		mLinearLayout5 = (LinearLayout) mPopupMenu.findViewById(R.id.update);
		mLinearLayout1.setOnClickListener(this);
		mLinearLayout2.setOnClickListener(this);
		mLinearLayout3.setOnClickListener(this);
		mLinearLayout4.setOnClickListener(this);
		mLinearLayout5.setOnClickListener(this);

	}

	private void dissmissPopupWindows()
	{
		if (mPopupWindow != null && mPopupWindow.isShowing())
		{
			mPopupWindow.dismiss();
		}
	}

	private double getDensityRatio()
	{
		DisplayMetrics displayMetrics = new DisplayMetrics();
		Display display = getWindowManager().getDefaultDisplay();
		display.getMetrics(displayMetrics);

		double w = displayMetrics.widthPixels;
		double h = displayMetrics.heightPixels;
		int CURRENT_DENSITY = displayMetrics.densityDpi;
		double DENSITY_RATIO = CURRENT_DENSITY / STANDARD_DENSITY;
		return DENSITY_RATIO;
	}

	@Override
	public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
	{
		if (isChecked)
		{
			System.out.println("isChecked");
			dissmissPopupWindows();
			switch (buttonView.getId())
			{
			case R.id.radio_button0:
				this.mTabHost.setCurrentTabByTag("A_TAB");
				break;
			case R.id.radio_button1:
				this.mTabHost.setCurrentTabByTag("B_TAB");
				break;
			case R.id.radio_button2:
				this.mTabHost.setCurrentTabByTag("C_TAB");
				break;
			case R.id.radio_button3:
				mPopupWindow.showAsDropDown(mR4, 0, 0);
				break;
			}
		}

	}

	private void setupIntent()
	{
		this.mTabHost = getTabHost();
		TabHost localTabHost = this.mTabHost;

		localTabHost.addTab(buildTabSpec("A_TAB", R.string.main_news,
				R.drawable.icon_1_n, this.mAIntent));

		localTabHost.addTab(buildTabSpec("B_TAB", R.string.main_down,
				R.drawable.icon_2_n, this.mBIntent));

		localTabHost.addTab(buildTabSpec("C_TAB", R.string.main_message,
				R.drawable.icon_3_n, this.mCIntent));

		localTabHost.addTab(buildTabSpec("D_TAB", R.string.more,
				R.drawable.icon_4_n, this.mDIntent));
	}

	private TabHost.TabSpec buildTabSpec(String tag, int resLabel, int resIcon,
			final Intent content)
	{
		return this.mTabHost
				.newTabSpec(tag)
				.setIndicator(getString(resLabel),
						getResources().getDrawable(resIcon))
				.setContent(content);
	}

	@Override
	public void onClick(View v)
	{
		dissmissPopupWindows();
		switch (v.getId())
		{
		case R.id.zhanghao:
			Toast.makeText(MainTabActivity.this, "账号管理", Toast.LENGTH_SHORT)
					.show();
			break;
		case R.id.firav:
			Toast.makeText(MainTabActivity.this, "收藏夹", Toast.LENGTH_SHORT)
					.show();
			break;
		case R.id.yijian:
			Toast.makeText(MainTabActivity.this, "意见反馈", Toast.LENGTH_SHORT)
					.show();
			break;
		case R.id.abort:
			Toast.makeText(MainTabActivity.this, "关于我们", Toast.LENGTH_SHORT)
					.show();
			break;
		case R.id.update:
			Toast.makeText(MainTabActivity.this, "版本更新", Toast.LENGTH_SHORT)
					.show();
			break;
		}
	}
}


点击我下载源码:



你可能感兴趣的:(android的tabhost+RadioGroup+PopupWindow)