android的tabhost+RadioGroup+PopupWindow

根據網上的代碼稍作修改瞭下,放著記錄學習。

效果圖如下:

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;  
        }  
    }  
}  

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;
		}
	}
}

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *