程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# WinForm運用法式下降體系內存占用辦法總結

C# WinForm運用法式下降體系內存占用辦法總結

編輯:C#入門知識

C# WinForm運用法式下降體系內存占用辦法總結。本站提示廣大學習愛好者:(C# WinForm運用法式下降體系內存占用辦法總結)文章只能為提供參考,不一定能成為您想要的結果。以下是C# WinForm運用法式下降體系內存占用辦法總結正文


繼續TabActivity並以activity結構
先檢查下終究後果圖:

2016412153332640.gif (388×256)

再看下代碼構造:

2016412153402122.gif (251×551)

個中black.gif望文生義就是一個黑配景圖片,grey.gif就是一張灰色的配景圖片

然後直接上代碼:
ArtistActivity.java

package cn.com.tagview; 
 
import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 
 
public class ArtistActivity extends Activity { 
 
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    TextView textView = new TextView(this); 
    // 該文檔將會作為標簽的內容停止顯示 
    textView.setText("藝術內容"); 
    setContentView(textView); 
     
  } 
} 

MusicActivity.java

package cn.com.tagview; 
 
import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 
 
public class MusicActivity extends Activity { 
 
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    TextView textView = new TextView(this); 
    // 該文檔將會作為標簽的內容停止顯示 
    textView.setText("音樂內容"); 
    setContentView(textView); 
  } 
} 

SportActivity.java

package cn.com.tagview; 
 
import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 
 
public class SportActivity extends Activity { 
 
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    TextView textView = new TextView(this); 
    // 該文檔將會作為標簽的內容停止顯示 
    textView.setText("活動內容"); 
    setContentView(textView); 
     
  } 
} 

ArtistActivity.java  MusicActivity.java  SportActivity.java三個activity是用做標簽內容的activity。即當用戶點擊響應的標簽時,下邊會顯示響應的activity內容。

ic_tab.xml代碼

<?xml version="1.0" encoding="utf-8"?> 
<selector 
 xmlns:android="http://schemas.android.com/apk/res/android" 
 > 
 <item android:drawable="@drawable/grey" 
    android:state_selected="true" 
 ></item> 
 <item android:drawable="@drawable/black" 
     
 ></item> 
</selector> 

這裡必定要留意ic_tab.xml文件的地位,是放在res/drawable文件夾下的。有些同伙說怎樣沒有這個文件夾啊,現實上年夜家看到了我將它放在了drawable-hdpi中了,現實上drawable-hdpi、drawable-ldpi、drawable-mdpi三個文件夾都屬於drawable文件夾的哦。該文件它劃定了,當標簽取得核心和掉去核心時,標簽上顯示甚麼圖片。

例如本例中,就是當state_selected="true"(當標簽被選中時),顯示@drawable/grey指定的資本圖片。當未被選中時,顯示@drawable/black指定的資本圖片。

tagView.java代碼:

package cn.com.tagview; 
 
import android.app.TabActivity; 
import android.content.Intent; 
import android.content.res.Resources; 
import android.os.Bundle; 
import android.widget.TabHost; 
 
/** 
 * @author chenzheng_Java 
 * @description 留意,該類必定要繼續TabActivity 
 */ 
public class TagView extends TabActivity { 
  @Override 
  public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // setContentView(R.layout.main); 
    // android代碼中拜訪application資本的一個類 
    Resources resources = getResources(); 
    // 獲得以後activity的標簽,該辦法的完成中曾經履行了setContentView(com.android.internal.R.layout.tab_content); 
    TabHost tabHost = getTabHost(); 
    // 每個標簽項 
    TabHost.TabSpec spec; 
 
    // 聲明一個意圖,該意圖告知我們,下一個跳轉到的activity是ArtistActivity。 
    Intent intent = new Intent(this, ArtistActivity.class); 
    /** 
     * tabHost.newTabSpec("artist")創立一個標簽項,個中artist為它的標簽標識符,相當於jsp頁面標簽的name屬性 
     * setIndicator("藝術標簽",resources.getDrawable(R.drawable.ic_tab))設置標簽顯示文本和標簽上的圖標(該圖標其實不是一個圖片,而是一個xml文件哦) 
     * setContent(intent)為以後標簽指定一個意圖 
     * tabHost.addTab(spec); 將標簽項添加到標簽中 
     */ 
    spec = tabHost.newTabSpec("artist").setIndicator("藝術標簽", 
        resources.getDrawable(R.drawable.ic_tab)).setContent(intent); 
    tabHost.addTab(spec); 
 
    Intent intent2 = new Intent(this, MusicActivity.class); 
    spec = tabHost.newTabSpec("music").setIndicator("音樂標簽", 
        resources.getDrawable(R.drawable.ic_tab)).setContent(intent2); 
    tabHost.addTab(spec); 
 
    Intent intent3 = new Intent(this, SportActivity.class); 
    spec = tabHost.newTabSpec("sport").setIndicator("體育標簽", 
        resources.getDrawable(R.drawable.ic_tab)).setContent(intent3); 
    tabHost.addTab(spec); 
 
    // tabHost.setCurrentTabByTag("music");設置第一次翻開時默許顯示的標簽,該參數與tabHost.newTabSpec("music")的參數雷同 
    tabHost.setCurrentTab(1);//設置第一次翻開時默許顯示的標簽,參數代表其添加到標簽中的次序,地位是從0開端的哦。 
 
  } 
} 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
   package="cn.com.tagview" 
   android:versionCode="1" 
   android:versionName="1.0"> 
  <uses-sdk android:minSdkVersion="8" /> 
 
  <application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <!-- android:theme="@android:style/Theme.NoTitleBar" 的意思是將體系默許的tag標簽去失落,為我們本身的標簽空出地位--> 
    <activity android:name=".TagView" 
         android:label="@string/app_name" 
         android:theme="@android:style/Theme.NoTitleBar" 
         > 
      <intent-filter> 
        <action android:name="android.intent.action.MAIN" /> 
        <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
    </activity> 
    <!-- 在主設置裝備擺設文件中聲明用於標簽切換的3個activity,記住此處必定要聲明,不然會失足 
      android:name="ArtistActivity"外面ArtistActivity後面能否有.都可以,你只須要包管該類是在manifest標簽下package屬性的包中便可。 
     --> 
    <activity android:name="ArtistActivity" android:label="@string/app_name"></activity>  
    <activity android:name="MusicActivity" android:label="@string/app_name"></activity>  
    <activity android:name="SportActivity" android:label="@string/app_name"></activity> 
 
  </application> 
</manifest> 

一切都弄好以後,運轉,就湧現了終究後果。這裡要留意,main.xml是一向都沒有效到的哦。

言之無物:

其實,應用TabHost結構與ListView有許多類似的地方,體系也異樣為他們供給了贊助類,TabHost-TabActivity  ListView-ListActivity .當我們的activity集成了這些類以後,普通在外面我們只須要整頓綁定下數據便可以。
再次聲明一下,代碼中是存在setContentView辦法的挪用的,只不外由於我們集成了TabActivity,TabActivity的getTabHost辦法中曾經停止了完成罷了。對用戶隱蔽了,其實不代表沒有。
項目中為了簡略易懂,我們只是在每一個標簽的內容部門添加了一個文本。現實上,我們完整可以在外面添加圖片、視頻等等。只需在響應的activity中完成就好了。我們可以看到,這類方法其實有很好的分層構造,activity與activity之間沒有太多耦合。
能夠一向到如今,有些同伙對TabActivity和ListActivity這類完成都特殊的別扭。我這裡就簡略的說一下,現實上這實際上是一種設計形式,模板形式。體系給你供給了一個完成了年夜部門內容的模板,然後你經由過程繼續模板,去做修正(例如模板中有一個辦法沒有任何完成,你重寫該辦法並對其停止詳細完成),讓其相符你的請求。這就是模板形式的道理。

繼續TabActivity並以結構文件停止結構
然後再來看以XML結構文件停止結構的辦法,先上後果圖:

2016412153506750.gif (364×347)

下面的是終究後果圖。
代碼構造以下。

2016412153522899.gif (249×438)

main.xml代碼:

<?xml version="1.0" encoding="utf-8"?> 
<!-- 該結構文件界說了標簽的內容部門,該結構文件必定要以FrameLayout為根元素 --> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  android:layout_width="fill_parent" android:layout_height="fill_parent"> 
  <!-- 第一個標簽內容 --> 
  <LinearLayout android:id="@+id/widget_layout_Blue" 
    android:layout_width="fill_parent" android:layout_height="fill_parent" 
    android:orientation="vertical" > 
    <EditText android:id="@+id/widget34" android:layout_width="fill_parent" 
      android:layout_height="wrap_content" android:text="EditText" 
      android:textSize="18sp"> 
    </EditText> 
    <Button android:id="@+id/widget30" android:layout_width="wrap_content" 
      android:layout_height="wrap_content" android:text="Button"> 
    </Button> 
  </LinearLayout> 
  <!-- 第二個標簽內容 AnalogClock為鐘表組件--> 
  <LinearLayout android:id="@+id/widget_layout_red" 
    android:layout_width="fill_parent" android:layout_height="fill_parent" 
    android:orientation="vertical" > 
    <AnalogClock android:id="@+id/widget36" 
      android:layout_width="wrap_content" android:layout_height="wrap_content"> 
    </AnalogClock> 
  </LinearLayout> 
  <!-- 第三個標簽內容 RadioButton必需在RadioGroup中哦 --> 
  <LinearLayout android:id="@+id/widget_layout_green" 
    android:layout_width="fill_parent" android:layout_height="fill_parent" 
    android:orientation="vertical"> 
    <RadioGroup android:id="@+id/widget43" 
      android:layout_width="166px" android:layout_height="98px" 
      android:orientation="vertical"> 
      <RadioButton android:id="@+id/widget44" 
        android:layout_width="wrap_content" android:layout_height="wrap_content" 
        android:text="RadioButton"> 
      </RadioButton> 
      <RadioButton android:id="@+id/widget45" 
        android:layout_width="wrap_content" android:layout_height="wrap_content" 
        android:text="RadioButton"> 
      </RadioButton> 
    </RadioGroup> 
  </LinearLayout> 
</FrameLayout> 

TagHostTest.java的代碼:

package cn.com.tagHost.test; 
 
import android.app.TabActivity; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.ViewGroup; 
import android.widget.TabHost; 
 
public class TagHostTest extends TabActivity { 
 
  private TabHost myTabhost; 
 
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    myTabhost = this.getTabHost(); 
 
    /** 
     * inflate(int resource, ViewGroup root, boolean attachToRoot) 
     * resource 很明顯是一個資本索引id 
     * 當attachToRoot為true時,root代表一個可放置於容器中的組件 
     * 當attachToRoot為false時,root僅代表一個存儲值的對象 
     * 該辦法的意思是,將依據R.layout.main生成的標簽View,添加到由myTabhost.getTabContentView()取得的父容器中 
     * LayoutInflater類的inflate辦法中有以下片斷 
     * if (root != null && attachToRoot) { 
            root.addView(temp, params); 
          } 
      個中temp是依據resource指定的資本生成的一個和標簽有關的view 
     */ 
    LayoutInflater.from(this).inflate(R.layout.main, 
        myTabhost.getTabContentView(), true); 
    myTabhost.setBackgroundColor(Color.argb(150, 22, 70, 150)); 
 
    myTabhost.addTab(myTabhost.newTabSpec("One") 
        .setIndicator("A").setContent(R.id.widget_layout_Blue)); 
 
    myTabhost.addTab(myTabhost.newTabSpec("Two") 
        .setIndicator("B", getResources().getDrawable(R.drawable.icon)) 
        .setContent(R.id.widget_layout_green)); 
 
    myTabhost.addTab(myTabhost.newTabSpec("Three") 
        .setIndicator("C", getResources().getDrawable(R.drawable.icon)) 
        .setContent(R.id.widget_layout_red)); 
  } 
} 

這類辦法完成起來比擬簡略,看看我們都做了些甚麼。
第一步:界說標簽內容部門的結構文件,該結構文件必需以FrameLayout為根節點。
第二步:讓activity繼續TabActivity,然後完成本身的代碼。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved