2016-04-28 14 views
0

Ich bin neu in der Welt der Android-Entwicklung und ich möchte eine Uhr so ​​machen, dass jede Ziffer der Zeit hat seine eigene Schrift. Stundenziffern haben ihre eigene Schrift und Minutenziffern haben ihre eigene Schrift. Wie kann ich das tun? Hilf mir.Benutzerdefinierte Schriftart für Uhr Textansicht

+0

Seien Sie speziell auf Ihre Frage, möchten Sie benutzerdefinierte Schriftart verwenden und andere Farbe einstellen? –

+0

Ich möchte benutzerdefinierte Schriftart. Bitte helfen Sie mir –

Antwort

0

Nehmen wir an, Ihr Schriftartname lautet DemoFont. Machen Sie eine Klasse, die sich erweitert TextView. Und initialisiere die Schriftart für den DemoFont.

Als nächstes die .ttf Datei dieser Schriftart in den Ordner 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); 
    } 

} 

Jetzt, in Ihrer Layout-Datei können Sie dies auf diese Weise verwenden.

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

Ich möchte zwei verschiedene Schriftarten verwenden. Eine für Stunden und eine für Minuten. Kannst du mir den kompletten Inhalt von MainActivity.java mit activity_main Layout schicken? Bitte helfen Sie –

+0

teilen, was Sie bisher versucht haben. Wir sind nicht hier, um Ihren Code zu schreiben. –

+0

Für zwei verschiedene Schriften machen Sie 2 verschiedene Klassen und verwenden Sie, wie Sie wollen. –

0

Zuerst müssen Sie eine Schriftartdatei herunterladen, die normalerweise das .otf-Format hat. Dann müssen Sie diese Schriftart in Ihren Assets-Ordner in Ihrem Android-Studio oder Eclipse-Projekt importieren. Danach können Sie ein neues Schriftbild erstellen und es auf Ihre Textansicht einstellen. In Bezug auf unterschiedliche Schriftarten für die Stunden- und Minutenziffer müssen Sie ein Layout mit mehreren Textansichten erstellen. Zum Beispiel, Sie so etwas wie die folgenden

<?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> 

Einen anderen Weg, dies zu tun tun könnte, anstatt eine Schrift zu einem Textview jedes Mal einstellen, ist Ihre eigene Textview zu erstellen, so dass die Schrift angewandt wird wann immer du es benutzt. Zum Beispiel für die Minuten Textansicht, könnten Sie tun:

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); 
} 

}

und die, die Layout-Datei aus früheren verwenden.

<?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

Ich möchte zwei verschiedene Schriftart für jeden verwenden. Eine für Stunden und eine für Minuten. –

+0

Ok .. so machen Sie eine andere Textansicht für Stunden und setzen Sie eine andere Art Gesicht dazu –

+0

Aber wie man es mit der aktuellen Zeit in Verbindung setzt.So zeigt es aktuelle Zeit an –

0

Kopieren Sie zuerst die Schriftarten in den Ordner "Assets" in Ihrem Projekt.

Für Hour 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); 
} 

} 

Für Minute 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); 
} 

} 

Für Sekunden 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); 
} 

} 

und in XML-Datei tun dies,

<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

Der Code, den Sie zur Verfügung stellten, ist ein statischer Text. Ich möchte es an die Zeit anhängen, wie ich eine Uhr-App mache. Also, um es zu zeigen, die aktuelle Zeit. –

+0

Sie möchten also Ihre Textansichten aktualisieren? –

+0

Aber welcher Wert ist zu setzen. Es sollte automatisch mit der aktuellen Uhrzeit geändert werden –

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); 
} 
} 
Verwandte Themen