android中用Spannable在TextView中設置超鏈接、顏色、字體




  要給 TextView 加上效果,方式主要有幾種:
  第一種,自動應用效果,使用 android:autolink 屬性,如:
  Java代碼
  android:id="@+id/text1"
  
  android:layout_width="match_parent"
  
  android:layout_height="match_parent"
  
  android:autoLink="all"
  
  android:text="@string/link_text_auto"
  
  />
  第二種,在文本中使用 標籤,如:
  Java代碼
 
 
  text2: This is some other
  
  text, with a link specified
  
  via an tag. Use a \"tel:\" URL
  
  to dial a phone number
  第三種,和第二種其實是一樣的,只不過將文本改在 JAVA 代碼中,如:
  Java代碼
 
  TextView t3 = (TextView) findViewById(R.id.text3);
  
  t3.setText(
  
  Html.fromHtml(
  
  "text3: Text with a " +
  
  "link " +
  
  "created in the Java source code using HTML."));
  
  t3.setMovementMethod(LinkMovementMethod.getInstance());
  第四種,前面三種可以說都是自動的,而第四種就是純“手工”的了。通過創建 SpanableString 字符串,並在之上創 建一個或多個 Span 來實現豐富的效果。例子如下:
  Java代碼
 
  SpannableString ss = new SpannableString("text4: Click here to dial the phone.");
  
  ss.setSpan(new StyleSpan(Typeface.BOLD), 06,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  
  ss.setSpan(new URLSpan("tel:4155551212"), 1317,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  
  TextView t4 = (TextView) findViewById(R.id.text4);
  
  t4.setText(ss);
  
  t4.setMovementMethod(LinkMovementMethod.getInstance());
  完整的代碼見 ApiDemo 吧,下面我提幾點需要注意的:
  .setMovementMethod,此方法在需要響應用戶事件時使用,如點擊一個電話號碼就跳轉到撥號頁面。如果不執行這個方法是不會響應事件的,即便文本看着已經是下劃線藍色字了。
  .Spanned.SPAN_EXCLUSIVE_EXCLUSIVE,這是在 setSpan 時需要指定的 flag,它的意義我試了很久也沒試出來,睡個覺,今天早上才突然有點想法,試之,果然。它是用來標識在 Span 範圍內的文本前後輸入新的字符時是否把它們也應用這個效果。分別有 Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前後都不包括)、Spanned.SPAN_INCLUSIVE_EXCLUSIVE(前面包括,後面不包括)、Spanned.SPAN_EXCLUSIVE_INCLUSIVE(前面不包括,後面包括)、Spanned.SPAN_INCLUSIVE_INCLUSIVE(前後都包括)。看個截圖就更明白了:

  對比一下

  在Android中,TextView是我們最常用的用來顯示文本的控件。
  一般情況下,TextView中的文本都是一個樣式。那麼如何對於TextView中各個部分的文本來設置字體,大小,顏色,樣式,以及超級鏈接等屬性呢?下面我們通過SpannableString的具體實例操作來演示一下。
  res-layout-main.xml:
  Java代碼
 
  android:layout_height="wrap_content" android:layout_width="wrap_content"android:orientation="horizontal">
  
  android:id="@+id/myTextView"
  
  android:layout_width="fill_parent"
  
  android:layout_height="wrap_content"
  
  />
  res-color-color.xml
  res-color-linkcolor.xml:
  Java代碼
 
  android:color="#ffffff00"/>
  
  android:color="#ff00ffff"/>
  TextViewLinkActivity:
  Java代碼
 
  import java.io.IOException;
  
  import org.xmlpull.v1.XmlPullParserException;
  
  import android.app.Activity;
  
  import android.content.res.ColorStateList;
  
  import android.content.res.XmlResourceParser;
  
  import android.graphics.Bitmap;
  
  import android.graphics.BitmapFactory;
  
  import android.graphics.Color;
  
  import android.graphics.drawable.Drawable;
  
  import android.os.Bundle;
  
  import android.text.SpannableString;
  
  import android.text.Spanned;
  
  import android.text.method.LinkMovementMethod;
  
  import android.text.style.AbsoluteSizeSpan;
  
  import android.text.style.BackgroundColorSpan;
  
  import android.text.style.BulletSpan;
  
  import android.text.style.DrawableMarginSpan;
  
  import android.text.style.ForegroundColorSpan;
  
  import android.text.style.IconMarginSpan;
  
  import android.text.style.ImageSpan;
  
  import android.text.style.RelativeSizeSpan;
  
  import android.text.style.ScaleXSpan;
  
  import android.text.style.StrikethroughSpan;
  
  import android.text.style.StyleSpan;
  
  import android.text.style.SubscriptSpan;
  
  import android.text.style.SuperscriptSpan;
  
  import android.text.style.TextAppearanceSpan;
  
  import android.text.style.TypefaceSpan;
  
  import android.text.style.URLSpan;
  
  import android.text.style.UnderlineSpan;
  
  import android.widget.TextView;
  
  public class TextViewLinkActivity extends Activity {
  
  TextView mTextView = null;
  
  SpannableString msp = null;
  
  /** Called when the activity is first created. */
  
  @Override
  
  public void onCreate(Bundle savedInstanceState) {
  
  super.onCreate(savedInstanceState);
  
  setContentView(R.layout.main);
  
  mTextView = (TextView)findViewById(R.id.myTextView);
  
  //創建一個 SpannableString對象
  
  msp = new SpannableString("字體測試字體大小一半兩倍前景色背景色正常粗體斜體粗斜體下劃線刪除線x1x2電話郵件網站短信彩信地圖X軸綜合/bot");
  
  //設置字體(default,default-bold,monospace,serif,sans-serif)
  
  msp.setSpan(new TypefaceSpan("monospace"), 02, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  
  msp.setSpan(new TypefaceSpan("serif"), 24, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  
  //設置字體大小(絕對值,單位:像素)
  
  msp.setSpan(new AbsoluteSizeSpan(20), 46, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  
  msp.setSpan(new AbsoluteSizeSpan(20,true), 68, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //第二個參數boolean dip,如果爲true,表示前面的字體大小單位爲dip,否則爲像素,同上。
  
  //設置字體大小(相對值,單位:像素) 參數表示爲默認字體大小的多少倍
  
  msp.setSpan(new RelativeSizeSpan(0.5f), 810, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //0.5f表示默認字體大小的一半
  
  msp.setSpan(new RelativeSizeSpan(2.0f), 1012, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //2.0f表示默認字體大小的兩倍
  
  //設置字體前景色
  
  msp.setSpan(new ForegroundColorSpan(Color.MAGENTA), 1215, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//設置前景色爲洋紅色
  
  //設置字體背景色
  
  msp.setSpan(new BackgroundColorSpan(Color.CYAN), 1518, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //設置背景色爲青色
  
  //設置字體樣式正常,粗體,斜體,粗斜體
  
  msp.setSpan(new StyleSpan(android.graphics.Typeface.NORMAL), 1820, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //正常
  
  msp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 2022, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //粗體
  
  msp.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 2224, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //斜體
  
  msp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 2427, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //粗斜體
  
  //設置下劃線
  
  msp.setSpan(new UnderlineSpan(), 2730, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  
  //設置刪除線
  
  msp.setSpan(new StrikethroughSpan(), 3033, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  
  //設置上下標
  
  msp.setSpan(new SubscriptSpan(), 3435, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //下標
  
  msp.setSpan(new SuperscriptSpan(), 3637, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //上標
  
  //超級鏈接(需要添加setMovementMethod方法附加響應)
  
  msp.setSpan(new URLSpan("tel:4155551212"), 3739, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //電話
  
  msp.setSpan(new URLSpan("mailto:[email protected]"), 3941, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //郵件
  
  msp.setSpan(new URLSpan("http://www.baidu.com"), 4143, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //網絡
  
  msp.setSpan(new URLSpan("sms:4155551212"), 4345, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //短信 使用sms:或者smsto:
  
  msp.setSpan(new URLSpan("mms:4155551212"), 4547, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //彩信 使用mms:或者mmsto:
  
  msp.setSpan(new URLSpan("geo:38.899533,-77.036476"), 4749, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//地圖
  
  //設置字體大小(相對值,單位:像素) 參數表示爲默認字體寬度的多少倍
  
  msp.setSpan(new ScaleXSpan(2.0f), 4951, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //2.0f表示默認字體寬度的兩倍,即X軸方向放大爲默認字體的兩倍,而高度不變
  
  //設置字體(依次包括字體名稱,字體大小,字體樣式,字體顏色,鏈接顏色)
  
  ColorStateList csllink = null;
  
  ColorStateList csl = null;
  
  XmlResourceParser xppcolor=getResources().getXml (R.color.color);
  
  try {
  
  csl= ColorStateList.createFromXml(getResources(),xppcolor);
  
  }catch(XmlPullParserException e){
  
  // TODO: handle exception
  
  e.printStackTrace();
  
  }catch(IOException e){
  
  // TODO: handle exception
  
  e.printStackTrace();
  
  }
  
  XmlResourceParser xpplinkcolor=getResources().getXml(R.color.linkcolor);
  
  try {
  
  csllink= ColorStateList.createFromXml(getResources(),xpplinkcolor);
  
  }catch(XmlPullParserException e){
  
  // TODO: handle exception
  
  e.printStackTrace();
  
  }catch(IOException e){
  
  // TODO: handle exception
  
  e.printStackTrace();
  
  }
  
  msp.setSpan(new TextAppearanceSpan("monospace",android.graphics.Typeface.BOLD_ITALIC, 30, csl, csllink), 5153, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  
  //設置項目符號
  
  msp.setSpan(new BulletSpan(android.text.style.BulletSpan.STANDARD_GAP_WIDTH,Color.GREEN), 0,msp.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //第一個參數表示項目符號佔用的寬度,第二個參數爲項目符號的顏色
  
  //設置圖片
  
  Drawable drawable = getResources().getDrawable(R.drawable.icon);
  
  drawable.setBounds(00, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
  
  msp.setSpan(new ImageSpan(drawable), 5357, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  
  mTextView.setText(msp);
  
  mTextView.setMovementMethod(LinkMovementMethod.getInstance());
  
  }
  
  }
  效果預覽:
  

  要給 TextView 加上效果,方式主要有幾種:
  第一種,自動應用效果,使用 android:autolink 屬性,如:
  Java代碼
  android:id="@+id/text1"
  
  android:layout_width="match_parent"
  
  android:layout_height="match_parent"
  
  android:autoLink="all"
  
  android:text="@string/link_text_auto"
  
  />
  第二種,在文本中使用 標籤,如:
  Java代碼
 
 
  text2: This is some other
  
  text, with a link specified
  
  via an tag. Use a \"tel:\" URL
  
  to dial a phone number
  第三種,和第二種其實是一樣的,只不過將文本改在 JAVA 代碼中,如:
  Java代碼
 
  TextView t3 = (TextView) findViewById(R.id.text3);
  
  t3.setText(
  
  Html.fromHtml(
  
  "text3: Text with a " +
  
  "link " +
  
  "created in the Java source code using HTML."));
  
  t3.setMovementMethod(LinkMovementMethod.getInstance());
  第四種,前面三種可以說都是自動的,而第四種就是純“手工”的了。通過創建 SpanableString 字符串,並在之上創 建一個或多個 Span 來實現豐富的效果。例子如下:
  Java代碼
 
  SpannableString ss = new SpannableString("text4: Click here to dial the phone.");
  
  ss.setSpan(new StyleSpan(Typeface.BOLD), 06,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  
  ss.setSpan(new URLSpan("tel:4155551212"), 1317,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  
  TextView t4 = (TextView) findViewById(R.id.text4);
  
  t4.setText(ss);
  
  t4.setMovementMethod(LinkMovementMethod.getInstance());
  完整的代碼見 ApiDemo 吧,下面我提幾點需要注意的:
  .setMovementMethod,此方法在需要響應用戶事件時使用,如點擊一個電話號碼就跳轉到撥號頁面。如果不執行這個方法是不會響應事件的,即便文本看着已經是下劃線藍色字了。
  .Spanned.SPAN_EXCLUSIVE_EXCLUSIVE,這是在 setSpan 時需要指定的 flag,它的意義我試了很久也沒試出來,睡個覺,今天早上才突然有點想法,試之,果然。它是用來標識在 Span 範圍內的文本前後輸入新的字符時是否把它們也應用這個效果。分別有 Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前後都不包括)、Spanned.SPAN_INCLUSIVE_EXCLUSIVE(前面包括,後面不包括)、Spanned.SPAN_EXCLUSIVE_INCLUSIVE(前面不包括,後面包括)、Spanned.SPAN_INCLUSIVE_INCLUSIVE(前後都包括)。看個截圖就更明白了:

  對比一下

  在Android中,TextView是我們最常用的用來顯示文本的控件。
  一般情況下,TextView中的文本都是一個樣式。那麼如何對於TextView中各個部分的文本來設置字體,大小,顏色,樣式,以及超級鏈接等屬性呢?下面我們通過SpannableString的具體實例操作來演示一下。
  res-layout-main.xml:
  Java代碼
 
  android:layout_height="wrap_content" android:layout_width="wrap_content"android:orientation="horizontal">
  
  android:id="@+id/myTextView"
  
  android:layout_width="fill_parent"
  
  android:layout_height="wrap_content"
  
  />
  res-color-color.xml
  res-color-linkcolor.xml:
  Java代碼
 
  android:color="#ffffff00"/>
  
  android:color="#ff00ffff"/>
  TextViewLinkActivity:
  Java代碼
 
  import java.io.IOException;
  
  import org.xmlpull.v1.XmlPullParserException;
  
  import android.app.Activity;
  
  import android.content.res.ColorStateList;
  
  import android.content.res.XmlResourceParser;
  
  import android.graphics.Bitmap;
  
  import android.graphics.BitmapFactory;
  
  import android.graphics.Color;
  
  import android.graphics.drawable.Drawable;
  
  import android.os.Bundle;
  
  import android.text.SpannableString;
  
  import android.text.Spanned;
  
  import android.text.method.LinkMovementMethod;
  
  import android.text.style.AbsoluteSizeSpan;
  
  import android.text.style.BackgroundColorSpan;
  
  import android.text.style.BulletSpan;
  
  import android.text.style.DrawableMarginSpan;
  
  import android.text.style.ForegroundColorSpan;
  
  import android.text.style.IconMarginSpan;
  
  import android.text.style.ImageSpan;
  
  import android.text.style.RelativeSizeSpan;
  
  import android.text.style.ScaleXSpan;
  
  import android.text.style.StrikethroughSpan;
  
  import android.text.style.StyleSpan;
  
  import android.text.style.SubscriptSpan;
  
  import android.text.style.SuperscriptSpan;
  
  import android.text.style.TextAppearanceSpan;
  
  import android.text.style.TypefaceSpan;
  
  import android.text.style.URLSpan;
  
  import android.text.style.UnderlineSpan;
  
  import android.widget.TextView;
  
  public class TextViewLinkActivity extends Activity {
  
  TextView mTextView = null;
  
  SpannableString msp = null;
  
  /** Called when the activity is first created. */
  
  @Override
  
  public void onCreate(Bundle savedInstanceState) {
  
  super.onCreate(savedInstanceState);
  
  setContentView(R.layout.main);
  
  mTextView = (TextView)findViewById(R.id.myTextView);
  
  //創建一個 SpannableString對象
  
  msp = new SpannableString("字體測試字體大小一半兩倍前景色背景色正常粗體斜體粗斜體下劃線刪除線x1x2電話郵件網站短信彩信地圖X軸綜合/bot");
  
  //設置字體(default,default-bold,monospace,serif,sans-serif)
  
  msp.setSpan(new TypefaceSpan("monospace"), 02, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  
  msp.setSpan(new TypefaceSpan("serif"), 24, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  
  //設置字體大小(絕對值,單位:像素)
  
  msp.setSpan(new AbsoluteSizeSpan(20), 46, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  
  msp.setSpan(new AbsoluteSizeSpan(20,true), 68, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //第二個參數boolean dip,如果爲true,表示前面的字體大小單位爲dip,否則爲像素,同上。
  
  //設置字體大小(相對值,單位:像素) 參數表示爲默認字體大小的多少倍
  
  msp.setSpan(new RelativeSizeSpan(0.5f), 810, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //0.5f表示默認字體大小的一半
  
  msp.setSpan(new RelativeSizeSpan(2.0f), 1012, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //2.0f表示默認字體大小的兩倍
  
  //設置字體前景色
  
  msp.setSpan(new ForegroundColorSpan(Color.MAGENTA), 1215, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//設置前景色爲洋紅色
  
  //設置字體背景色
  
  msp.setSpan(new BackgroundColorSpan(Color.CYAN), 1518, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //設置背景色爲青色
  
  //設置字體樣式正常,粗體,斜體,粗斜體
  
  msp.setSpan(new StyleSpan(android.graphics.Typeface.NORMAL), 1820, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //正常
  
  msp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 2022, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //粗體
  
  msp.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 2224, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //斜體
  
  msp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 2427, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //粗斜體
  
  //設置下劃線
  
  msp.setSpan(new UnderlineSpan(), 2730, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  
  //設置刪除線
  
  msp.setSpan(new StrikethroughSpan(), 3033, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  
  //設置上下標
  
  msp.setSpan(new SubscriptSpan(), 3435, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //下標
  
  msp.setSpan(new SuperscriptSpan(), 3637, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //上標
  
  //超級鏈接(需要添加setMovementMethod方法附加響應)
  
  msp.setSpan(new URLSpan("tel:4155551212"), 3739, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //電話
  
  msp.setSpan(new URLSpan("mailto:[email protected]"), 3941, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //郵件
  
  msp.setSpan(new URLSpan("http://www.baidu.com"), 4143, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //網絡
  
  msp.setSpan(new URLSpan("sms:4155551212"), 4345, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //短信 使用sms:或者smsto:
  
  msp.setSpan(new URLSpan("mms:4155551212"), 4547, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //彩信 使用mms:或者mmsto:
  
  msp.setSpan(new URLSpan("geo:38.899533,-77.036476"), 4749, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//地圖
  
  //設置字體大小(相對值,單位:像素) 參數表示爲默認字體寬度的多少倍
  
  msp.setSpan(new ScaleXSpan(2.0f), 4951, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //2.0f表示默認字體寬度的兩倍,即X軸方向放大爲默認字體的兩倍,而高度不變
  
  //設置字體(依次包括字體名稱,字體大小,字體樣式,字體顏色,鏈接顏色)
  
  ColorStateList csllink = null;
  
  ColorStateList csl = null;
  
  XmlResourceParser xppcolor=getResources().getXml (R.color.color);
  
  try {
  
  csl= ColorStateList.createFromXml(getResources(),xppcolor);
  
  }catch(XmlPullParserException e){
  
  // TODO: handle exception
  
  e.printStackTrace();
  
  }catch(IOException e){
  
  // TODO: handle exception
  
  e.printStackTrace();
  
  }
  
  XmlResourceParser xpplinkcolor=getResources().getXml(R.color.linkcolor);
  
  try {
  
  csllink= ColorStateList.createFromXml(getResources(),xpplinkcolor);
  
  }catch(XmlPullParserException e){
  
  // TODO: handle exception
  
  e.printStackTrace();
  
  }catch(IOException e){
  
  // TODO: handle exception
  
  e.printStackTrace();
  
  }
  
  msp.setSpan(new TextAppearanceSpan("monospace",android.graphics.Typeface.BOLD_ITALIC, 30, csl, csllink), 5153, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  
  //設置項目符號
  
  msp.setSpan(new BulletSpan(android.text.style.BulletSpan.STANDARD_GAP_WIDTH,Color.GREEN), 0,msp.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //第一個參數表示項目符號佔用的寬度,第二個參數爲項目符號的顏色
  
  //設置圖片
  
  Drawable drawable = getResources().getDrawable(R.drawable.icon);
  
  drawable.setBounds(00, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
  
  msp.setSpan(new ImageSpan(drawable), 5357, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  
  mTextView.setText(msp);
  
  mTextView.setMovementMethod(LinkMovementMethod.getInstance());
  
  }
  
  }
  效果預覽:
  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章