2016-04-28 67 views
0

我是Android開發領域的新手,我想製作一個時鐘,讓每個數字都有自己的字體。 小時數字有它自己的字體,分鐘數字有它自己的字體。 我該如何做到這一點。幫我。時鐘textview的自定義字體

+0

針對你的問題,你想使用自定義字體並設置不同的顏色? –

+0

我想要自定義字體。請幫我 –

回答

0

假設您的字體名稱是DemoFont。創建一個擴展爲TextView的類。並初始化DemoFont的字體。

接下來將該字體的.ttf文件放在assets文件夾中。

public class DemoFont extends TextView { 


    public DemoFont (Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     init(); 
    } 

    public DemoFont (Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    public DemoFont (Context context) { 
     super(context); 
     init(); 
    } 

    private void init() { 
     Typeface tf = Typeface.createFromAsset(getContext().getAssets(), 
       "demofont.ttf"); 
     setTypeface(tf); 
    } 

} 

現在,在你的佈局文件中,你可以像這樣使用它。

<YOUR_PACKAGE_NAME.DemoFont 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 
+0

我想用兩種不同的字體。一個小時,一個幾分鐘。你可以使用activity_main佈局向我發送MainActivity.java的完整內容。請幫助 –

+0

分享您迄今爲止所嘗試的內容。我們不是在這裏做你的代碼。 –

+0

對於兩個不同的字體使2個不同的類和使用,如你所願。 –

0

首先,您需要下載一個通常爲.otf格式的字體文件。然後,您需要將此字體導入到您的android studio或eclipse項目的資產文件夾中。做完這些之後,您可以創建一個新的字體並將其設置爲您的文本視圖。就具有小時和分鐘數字的不同字體而言,您需要創建一個包含多個文本視圖的佈局。例如,你可以不喜歡以下

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/hours_digit"/> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text=": " 
    android:id="@+id/time_colon" 
    android:layout_toEndOf="@id/hours_digit" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_toEndOf="@id/time_colon" 
    android:id="@+id/minutes_digit"/> 

</RelativeLayout> 

另一種方式來做到這一點,而不是字體設置爲一個TextView每一次,是創建自己的自定義TextView的,這樣的字體將被應用每當你使用它。例如,對於會議紀要文本視圖,你可以這樣做:

public class MinutesTextView extends TextView { 

// Constructor method for the text view... 
public MinutesTextView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    init(attrs); 
} 

// Constructor method for the text view... 
public MinutesTextView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    init(attrs); 

} 

// Constructor method for the text view... 
public MinutesTextView(Context context) { 
    super(context); 
    init(null); 
} 

// Initializes any UI properties of the text view. 
private void init(AttributeSet attrs) { 
    Typeface myTypeface = Typeface.createFromAsset(getContext().getAssets(), "Minutes-font-file.otf"); 
    setTypeface(myTypeface); 
} 

}

和使用佈局文件從早期。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<com.example.yourpackage.MinutesTextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/hours_digit"/> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text=": " 
    android:id="@+id/time_colon" 
    android:layout_toEndOf="@id/hours_digit" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_toEndOf="@id/time_colon" 
    android:id="@+id/minutes_digit"/> 

</RelativeLayout> 
+0

我想爲每個使用兩個不同的字體。一個小時,一個幾分鐘。 –

+0

好的..因此,讓另一個文本視圖小時,並設置一個不同的類型面對它 –

+0

但如何將它與當前時間。所以它顯示當前時間 –

0

首先將字體複製到項目中的資產文件夾。

對於小時的TextView

public class HourTextView extends TextView { 

public HourTextView(Context context) { 
    super(context); 
    init(null); 
} 

public HourTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
    super(context, attrs, defStyleAttr, defStyleRes); 
    init(attrs); 
} 

public HourTextView(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
    init(attrs); 
} 

public HourTextView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    init(attrs); 
} 

// Initializes any UI properties of the text view. 
private void init(AttributeSet attrs) { 
    Typeface myTypeface = Typeface.createFromAsset(getContext().getAssets(), "Hour-font-file.otf"); 
    setTypeface(myTypeface); 
} 

} 

對於分鐘的TextView

public class MinuteTextView extends TextView { 

public MinuteTextView(Context context) { 
    super(context); 
    init(null); 
} 

public MinuteTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
    super(context, attrs, defStyleAttr, defStyleRes); 
    init(attrs); 
} 

public MinuteTextView(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
    init(attrs); 
} 

public MinuteTextView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    init(attrs); 
} 

// Initializes any UI properties of the text view. 
private void init(AttributeSet attrs) { 
    Typeface myTypeface = Typeface.createFromAsset(getContext().getAssets(), "Minute-font-file.otf"); 
    setTypeface(myTypeface); 
} 

} 

幾秒鐘的TextView

public class SecondTextView extends TextView { 

public SecondTextView(Context context) { 
    super(context); 
    init(null); 
} 

public SecondTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
    super(context, attrs, defStyleAttr, defStyleRes); 
    init(attrs); 
} 

public SecondTextView(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
    init(attrs); 
} 

public SecondTextView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    init(attrs); 
} 

// Initializes any UI properties of the text view. 
private void init(AttributeSet attrs) { 
    Typeface myTypeface = Typeface.createFromAsset(getContext().getAssets(), "Second-font-file.otf"); 
    setTypeface(myTypeface); 
} 

} 

,並在XML文件中做到這一點,

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:gravity="center"> 

<com.yourpackage.HourTextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="10" 
    android:id="@+id/hourText" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text=" : " /> 

<com.yourpackage.MinuteTextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="45 " 
    android:id="@+id/minuteText" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text=" : " /> 

<com.yourpackage.SecondTextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="28" 
    android:id="@+id/secondsText" /> 

</LinearLayout> 
+0

您提供的代碼是一個靜態文本。我想把它附加到時間,因爲我正在製作一個時鐘應用程序。所以要讓它顯示當前時間。 –

+0

所以你想更新你的textviews? –

+0

但是有什麼價值。它應該隨着當前時間自動變化 –

0
public class MainActivity extends AppCompatActivity { 

public TextView textView; 
int countInt; 
private int mInterval = 1000; // 1 second by default, can be changed later 
private Handler mHandler; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    textView=(TextView)findViewById(R.id.textView); 

    mHandler = new Handler(); 
    startRepeatingTask(); 
} 

Runnable mStatusChecker = new Runnable() { 
    @Override 
    public void run() { 
     try { 
      countInt=countInt+1; 
      textView.setText(String.valueOf(countInt)); 
     } finally { 
      mHandler.postDelayed(mStatusChecker, mInterval); 
     } 
    } 
}; 

void startRepeatingTask() { 
    mStatusChecker.run(); 
} 

void stopRepeatingTask() { 
    mHandler.removeCallbacks(mStatusChecker); 
} 
}