程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#完成從收集同步尺度北京時光的辦法

C#完成從收集同步尺度北京時光的辦法

編輯:C#入門知識

C#完成從收集同步尺度北京時光的辦法。本站提示廣大學習愛好者:(C#完成從收集同步尺度北京時光的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是C#完成從收集同步尺度北京時光的辦法正文


我們曾經有文章向你描寫若何應用<include />標簽來重用和同享你的結構代碼。這篇文章將向你論述<merge />標簽的應用和若何與<include />標簽互補應用。

<merge />標簽用於削減View樹的條理來優化Android的結構。經由過程看一個例子,你就可以很輕易的懂得這個標簽能處理的成績。上面的XML結構顯示一個圖片,而且有一個題目位於其上方。這個構造相當的簡略;FrameLayout裡放置了一個ImageView,其上放置了一個TextView:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  <ImageView 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:scaleType="center"
    android:src="@drawable/golden_gate" />
  <TextView
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="20dip"
    android:layout_gravity="center_horizontal|bottom"
    android:padding="12dip"
    android:background="#AA000000"
    android:textColor="#ffffffff"
    android:text="Golden Gate" />
</FrameLayout>

結構襯著起來很英俊,並且看不出有甚麼成績:

當你應用HierarchyViewer對象來檢討時,你會發明工作變得很風趣。假如你細心檢查View樹,你將會留意到,我們在XML文件中界說的FrameLayout(藍色高亮顯示)是另外一個FrameLayout獨一的子元素:


既然我們的FrameLayout和它的父元素有著雷同的尺寸(歸功於fill_parent常量),而且也沒有界說任何的background,額定的padding或許gravity,所以它完整是無用的。我們所做的,只是讓UI變得更加龐雜。如何我們能力解脫這個FrameLayout呢?究竟,XML文檔須要一個根標簽且XML結構老是與響應的View實例想對應。

這時候候,<merge />標簽閃亮退場了。當LayoutInflater碰到這個標簽時,它會跳過它,並將<merge />內的元素添加到<merge />的父元素裡。困惑了嗎?讓我們用<merge />來調換FrameLayout,偏重寫之前的XML結構:

<merge xmlns:android="http://schemas.android.com/apk/res/android">
  <ImageView 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:scaleType="center"
    android:src="@drawable/golden_gate" />
  <TextView
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="20dip"
    android:layout_gravity="center_horizontal|bottom"
    android:padding="12dip"
    android:background="#AA000000"
    android:textColor="#ffffffff"
    android:text="Golden Gate" />
</merge>

新的代碼中,TextView和ImageView都直接添加到上一層的FrameLayout裡。固然視覺上看起來一樣,但View的條理加倍簡略了:


很明顯,在這個場所應用<merge />是由於Activity的ContentView的父元素一直是FrameLayout。假如你的結構應用LinearLayout作為它的根標簽(舉例),那末你就不克不及應用這個技能。<merge />在其它的一些場所也很有效的。例如,它與<include />標簽聯合起來就可以表示得很完善。你還可以在創立一個自界說的組合View時應用<merge />。讓我們看一個應用<merge />創立一個新View的例子——OkCancelBar,包括兩個按鈕,並可以設置按鈕標簽。上面的XML用於在一個圖片上顯示自界說的View:

<merge
  xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:okCancelBar="http://schemas.android.com/apk/res/com.example.android.merge">
  <ImageView 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:scaleType="center"
    android:src="@drawable/golden_gate" />
  <com.example.android.merge.OkCancelBar
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom"
    android:paddingTop="8dip"
    android:gravity="center_horizontal"
    android:background="#AA000000"
    okCancelBar:okLabel="Save"
    okCancelBar:cancelLabel="Don't save" />
</merge>

新的結構後果以下圖所示:


OkCancelBar的代碼很簡略,由於這兩個按鈕在內部的XML文件中界說,經由過程LayoutInflate類導入。以下面的代碼片斷所示,R.layout.okcancelbar以OkCancelBar為父元素:

public class OkCancelBar extends LinearLayout {
  public OkCancelBar(Context context, AttributeSet attrs) {
    super(context, attrs);
    setOrientation(HORIZONTAL);
    setGravity(Gravity.CENTER);
    setWeightSum(1.0f);
    
    LayoutInflater.from(context).inflate(R.layout.okcancelbar, this, true);
    
    TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.OkCancelBar, 0, 0);
    
    String text = array.getString(R.styleable.OkCancelBar_okLabel);
    if (text == null) text = "Ok";
    ((Button) findViewById(R.id.okcancelbar_ok)).setText(text);
    
    text = array.getString(R.styleable.OkCancelBar_cancelLabel);
    if (text == null) text = "Cancel";
    ((Button) findViewById(R.id.okcancelbar_cancel)).setText(text);
    
    array.recycle();
  }
}

兩個按鈕的界說以下面的XML所示。正如你所看到的,我們應用<merge />標簽直接添加兩個按鈕到OkCancelBar。每一個按鈕都是從內部雷同的XML結構文件包括出去的,便於保護;我們只是簡略地重寫它們的id:

<merge xmlns:android="http://schemas.android.com/apk/res/android">
  <include
    layout="@layout/okcancelbar_button"
    android:id="@+id/okcancelbar_ok" />    
  <include
    layout="@layout/okcancelbar_button"
    android:id="@+id/okcancelbar_cancel" />
</merge>

我們創立了一個靈巧且易於保護的自界說View,它有著高效的View條理:

<merge />標簽極端有效。但是它也有以下兩個限制:
·         <merge />只能作為XML結構的根標簽應用
·         當Inflate以<merge />開首的結構文件時,必需指定一個父ViewGroup,而且必需設定attachToRoot為true(參看inflate(int, android.view.ViewGroup, Boolean)辦法)。 

後果圖:


以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。

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