編輯:關於Android編程
根據網上的代碼稍作修改了下,放著記錄學習。
效果圖如下:
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; } } }
前言 新的一年新的開始,除了繼續我的原有課題之外,我還打算研究下Android逆向工程的一些東西,主要包括反編譯、Smali、APK打包、簽名、反逆向和移動
效果圖展示,圖片有點卡,耐心看會,原程序是很流暢的實現步驟: 聲明變量 初始化畫筆、文本大小和坐標 onMeasure()適配wrap_content的寬高 onDraw
這是個不錯的教程,自己學完了之後就拿出來分享了,本來想一個帖子寫完,但是發現這樣對自己寫博客的效率有點出入,為了讓大家看的舒服點,所以分開來寫,我們先開看下百度壁紙的客戶
在項目中,難免會遇到這種需求,在程序運行時需要動態根據條件來決定顯示哪個View或某個布局,最通常的想法就是把需要動態顯示的View都先寫在布局中,然後把它們的可見性設為