Android-World Clock Widget模拟

时间:2011-12-08 04:49:59

标签: android widget clock

我打算在android中创建一个世界时钟小部件。时钟应将所选国家/地区的时间显示为模拟时钟小部件。但是我感觉很困难,因为我是android的初学者。

我的widget.xml文件包含以下内容: -

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

  android:id="@+id/Widget"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:layout_margin="8dip"
  android:background="@drawable/myshape" >
<AnalogClock android:id="@+id/AnalogClock"
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content"
 android:dial="@drawable/widgetdial" 
 android:hand_hour="@drawable/widgethour"
 android:hand_minute="@drawable/widgetminute"/>

我正在为我的小部件使用以下配置活动: - (显示城市列表) 包nEx.Software.Tutorials.Widgets.AnalogClock;

import java.io.BufferedReader;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Calendar;
import android.app.Activity;
import android.app.PendingIntent;
import android.app.ProgressDialog;
import android.appwidget.AppWidgetManager;
import android.content.Intent;
import android.os.Bundle;
import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView;
import android.widget.AnalogClock;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RemoteViews;
import android.widget.TextView;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ConfigureApp extends Activity {
DateFormat df;
 private ListView cityList;

    public static String[][] citylist = new String[1242][10];
    String[] cities = new String[1242];
    String field[] = new String[20];
    String list[][] = new String[1242][10];                         
    String country = "";
    String line = null;
    int row = 0;
    int col = 0;

    // Variables for list view population
    String city = "";
    int position = 0;
    public int[] listArray = new int[1242];
    public static int len = 0;
    public String[][] adapterCityList = new String[1242][3];
    // Variables for passing intent data 
    public static final String citieslist = "com.world.citieslist";
   AppWidgetManager awm;
   Context c;
   int awID;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        // Set the result to CANCELED.  This will cause the widget host to cancel
        // out of the widget placement if they press the back button.
        setResult(RESULT_CANCELED);
          try {
              citylist = getCityList();
          } catch (IOException e) {
              Log.e("Loading CityList", e.getMessage());
          }

          for (int i = 0; i < 1242; i++) {
              cities[i] = citylist[i][0];
          }
        // Set the view layout resource to use.
        setContentView(R.layout.configure);
    c = ConfigureApp.this;
    Intent intent = getIntent();
    Bundle extras = intent.getExtras();
    if (extras != null) {
          awID = extras.getInt(
        AppWidgetManager.EXTRA_APPWIDGET_ID, 
        AppWidgetManager.INVALID_APPWIDGET_ID);
   } else{
finish();
}

awm = AppWidgetManager.getInstance(c);



        cityList=(ListView)findViewById(R.id.CityList);
     // By using setAdpater method in listview we an add string array in list.
     cityList.setAdapter(new ArrayAdapter<String> (this,android.R.layout.simple_list_item_1, cities));
    // cityList.setOnItemClickListener(cityListListener);
          cityList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> av, View v, int pos, long id) {
                df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
                  String str = ((TextView) v).getText().toString();

                  RemoteViews remoteViews = new RemoteViews(c.getPackageName(),
                        R.layout.widget);
                remoteViews.setTextViewText(R.id.mytext, str);
                remoteViews.setTextViewText(R.id.date, df.format(new Date()));
                 Intent in = new Intent(c,clock.class);

                PendingIntent pi = PendingIntent.getActivity(c, 0, in, 0);
                remoteViews.setOnClickPendingIntent(R.id.Widget, pi);
                                    awm.updateAppWidget(awID, remoteViews);
                    Intent result = new Intent();
                result.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,awID);
                setResult(RESULT_OK, result);
                finish();

            }
        });
    }           
    private String[][] getCityList() throws IOException {
        Context context = getApplicationContext();

        InputStream instream = context.getResources().openRawResource(R.raw.cities_final);

        // if file the available for reading
        if (instream != null) {

            // prepare the file for reading
            InputStreamReader inputreader = new InputStreamReader(instream);
            BufferedReader buffreader = new BufferedReader(inputreader);

            while ((line = buffreader.readLine()) != null) {

                field = line.split(",");
                for (String x : field) {
                    list[row][col] = x;
                    col++;
                    if (x != null) {
                        country = x;
                    }
                }
                list[row][2] = country;
                row++;
                col = 0;
            }

            for (int i = 0; (i < list.length); i++) {
                for (int j = 0; (j < 3); j++) {
                    if (j == 1) {
                        list[i][j] = list[i][j].substring(0, 6);
                    }
                }
            }
        }
        return list;
    }       

}

除模拟时钟外,我可以在小部件中使用自己的自定义视图吗?或者还有其他方式来显示时钟吗?比如使用Imageview作为钟面并根据时间绘制表盘?

请帮帮我。!!! :(

2 个答案:

答案 0 :(得分:0)

此链接给出了温度计的类似示例 http://mindtherobot.com/blog/272/android-custom-ui-making-a-vintage-thermometer/ 您也可以创建自己的视图并制作时钟。

答案 1 :(得分:0)

您可以使用自己的图纸更换时钟刻度盘,时钟指针和时钟指针。然后你将拥有自己的自定义时钟。

 android:dial="@drawable/YOUR_OWN_DIAL" 
 android:hand_hour="@drawable/YOUR_OWN_HOUR"
 android:hand_minute="@drawable/YOUR_OWN_MINUTE"

在图形布局工具中测试布局以查看其外观。