|
发表于 2016-10-16 23:10:24
|
|阅读模式
本帖最后由 翌阳 于 2017-4-27 08:35 编辑
这次加上了几个字体和颜色选项,按菜单键选择。因为加进了字体文件,APK体积一下子增加了好多。
还是比较懒,没设计更复杂的颜色选择器和外部字体。玩得差不多了,至此为止。
原系统的字体不太好看,改了几个字体装上。但我还只是喜欢那个 ubuntu-c的字体。- package elezen.tclock;
- import java.io.IOException;
- import java.util.Locale;
- import java.util.TimeZone;
- import android.app.Activity;
- import android.content.SharedPreferences;
- import android.content.SharedPreferences.Editor;
- import android.content.res.AssetManager;
- import android.graphics.Color;
- import android.graphics.Paint;
- import android.graphics.Typeface;
- import android.os.Bundle;
- import android.os.Handler;
- import android.text.Spannable;
- import android.text.SpannableStringBuilder;
- import android.text.style.AbsoluteSizeSpan;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.view.ViewTreeObserver;
- import android.view.ViewTreeObserver.OnPreDrawListener;
- import android.view.WindowManager;
- import android.widget.TextView;
- public class MainActivity extends Activity {
- Handler handler=new Handler();
- public TextView tv=null;
- private long timeZoneOffset;
- private String[] fonts;
- private final int SETCOLOR=10000;
- private int[] colors={Color.WHITE,Color.RED,Color.BLUE,Color.CYAN,
- Color.GREEN,Color.MAGENTA,Color.YELLOW,Color.DKGRAY,Color.GRAY,Color.LTGRAY};
- private String[] colorNames={"WHITE","RED","BLUE","CYAN",
- "GREEN","MAGENTA","YELLOW","DARKGRAY","GRAY","LIGHTGRAY"};
- SpannableStringBuilder ssb=new SpannableStringBuilder();
- AbsoluteSizeSpan has=new AbsoluteSizeSpan(64,true),
- mas=new AbsoluteSizeSpan(32,true);
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- tv=(TextView)findViewById(R.id.t1);
- getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
- timeZoneOffset=TimeZone.getDefault().getRawOffset();
- AssetManager assets=getAssets();
- try {
- fonts=assets.list("fonts");
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- SharedPreferences sp =getSharedPreferences("Settings", MODE_PRIVATE);
- int id=sp.getInt("COLOR",0);
- if(id>=0 && id<colors.length)tv.setTextColor(colors[id]);
- id=sp.getInt("FONT",0);
- if(id>=0 && id<fonts.length){
- Typeface fontFace = Typeface.createFromAsset(getAssets(),
- "fonts/"+fonts[id]);
- tv.setTypeface(fontFace);
- }
- autoFit();
-
- }
-
- @Override
- protected void onResume(){
- super.onResume();
- handler.post(runnable);
- }
- @Override
- protected void onPause(){
- super.onPause();
- handler.removeCallbacks(runnable);
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu)
- {
- int i=0;
- for (String s : fonts){
- menu.add(1,i,i,s.replace(".ttf", getResources().getString(R.string.font)));
- i++;
- }
- i=SETCOLOR;
- for (String s:colorNames){
- menu.add(2, i, i,s+getResources().getString(R.string.color));
- i++;
- }
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item)
- {
-
- int id = item.getItemId();
- if(id>=0 && id<fonts.length){
- Typeface fontFace = Typeface.createFromAsset(getAssets(),
- "fonts/"+fonts[id]);
- tv.setTypeface(fontFace);
- autoFit();
- SharedPreferences sp =getSharedPreferences("Settings", MODE_PRIVATE);
- Editor editor=sp.edit();
- editor.putInt("FONT",id);
- editor.commit();
- }else if(id>=SETCOLOR){
- id-=SETCOLOR;
- if(id<colors.length){
- tv.setTextColor(colors[id]);
- SharedPreferences sp =getSharedPreferences("Settings", MODE_PRIVATE);
- Editor editor=sp.edit();
- editor.putInt("COLOR",id);
- editor.commit();
- }
- }
- return true;
- }
-
-
-
- Runnable runnable=new Runnable() {
- @Override
- public void run() {
- long t=System.currentTimeMillis();
- ssb.replace(0, ssb.length(), getTime(t));
- ssb.setSpan(has, 0, 5, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
- ssb.setSpan(mas, 5, 8, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
- tv.setText(ssb);
- handler.postDelayed(this, 1000-t%1000);
- }
- };
- private final CharSequence getTime(long t) {
- long h,m,s;
- t+=timeZoneOffset;
- h=t/(60*60*1000) % 12;
- if(h==0)h=12;
- m=t/(60*1000)%60;
- s=t/1000%60;
- return String.format(Locale.US, "%2d:%02d:%02d", h,m,s);
- }
- private final void autoFit(){
- ViewTreeObserver greenObserver = tv.getViewTreeObserver();
- greenObserver.addOnPreDrawListener(new OnPreDrawListener() {
- @Override
- public boolean onPreDraw() {
- Paint p=tv.getPaint();
- float tw,textSize;
- tv.getViewTreeObserver().removeOnPreDrawListener(this);
- float w = tv.getWidth()-tv.getPaddingLeft()-tv.getPaddingRight();
- p.setTextSize(240F);
- tw=p.measureText("00:00");
- p.setTextSize(120F);
- tw+=p.measureText(":00");
- textSize=240F*w/tw;
- has=new AbsoluteSizeSpan((int) textSize,false);
- mas=new AbsoluteSizeSpan((int) textSize/2,false);
- return true;
- }
- });
- }
- }
复制代码 编译好的程序:
Tclock.zip
(85.84 KB, 下载次数: 141)
到网上找了个COLORPICKER,加上了,这回颜色更丰富了,按外圈选择颜色,按中心确定。
更新后的APK:
Tclock.zip
(89.09 KB, 下载次数: 142)
又加了不少字体,共30种了:
Tclock.zip
(149.38 KB, 下载次数: 121)
对字库文件进行了清理,省了不少空间。33种字体:
Tclock.zip
(85.33 KB, 下载次数: 115)
又优化一下代码:
Tclock.zip
(85.41 KB, 下载次数: 137)
增加了全屏显示选择项:
Tclock33FullSrc.zip
(85.85 KB, 下载次数: 137)
发现存在个问题,那就是在新版的某些系统中,比如ANDROID5.0 6.0什么的,它们取消了菜单键!这样就没有办法打开菜单了。改了一下,可以向上滑动打开菜单:
Tclock33FullSlideMenu.zip
(86.07 KB, 下载次数: 192)
不过确实没有想到这方面的问题,因为我的手机(MOKEE51)是有菜单键的,而华为的荣耀7,却是没有菜单键。但不会有人把这么好的手机也闲置吧,嗯,也不好说,毕竟IPHONE5S都闲置了啊。于是,还是改一下吧,至少将来也许会用上。
发现这东西又被关心了,上传个最新优化版本(也没优化个啥,只是做了资源对齐,zipalign,后来学习到的,说是这样做会提高APK资源的读取速度,减小内存占用):
Tclock.new.zip
(86.13 KB, 下载次数: 199)
截图:
|
|