Android世界时钟小部件模拟

Android世界时钟小部件模拟,android,widget,clock,Android,Widget,Clock,我计划在android中创建一个世界时钟小部件。时钟应以模拟时钟小部件的形式显示所选国家/地区的时间。但我觉得很困难,因为我是android的初学者 My widget.xml文件包含以下内容:- <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/Widget"

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

My 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;
    }       
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.util.ArrayList;
导入java.util.Calendar;
导入android.app.Activity;
导入android.app.pendingent;
导入android.app.ProgressDialog;
导入android.appwidget.AppWidgetManager;
导入android.content.Intent;
导入android.os.Bundle;
导入android.content.Context;
导入android.content.SharedReferences;
导入android.util.Log;
导入android.view.view;
导入android.view.ViewGroup.LayoutParams;
导入android.widget.AdapterView;
导入android.widget.AnalogClock;
导入android.widget.ArrayAdapter;
导入android.widget.EditText;
导入android.widget.ImageView;
导入android.widget.LinearLayout;
导入android.widget.ListView;
导入android.widget.remoteview;
导入android.widget.TextView;
导入java.text.DateFormat;
导入java.text.simpleDataFormat;
导入java.util.Date;
公共类ConfigureApp扩展活动{
日期格式df;
私人列表视图城市列表;
公共静态字符串[][]城市列表=新字符串[1242][10];
字符串[]城市=新字符串[1242];
字符串字段[]=新字符串[20];
字符串列表[][]=新字符串[1242][10];
字符串country=“”;
字符串行=null;
int行=0;
int col=0;
//列表视图填充的变量
字符串城市=”;
int位置=0;
public int[]listary=new int[1242];
公共静态int len=0;
公共字符串[][]adapterCityList=新字符串[1242][3];
//用于传递意图数据的变量
公共静态最终字符串citieslist=“com.world.citieslist”;
AppWidgetManager awm;
上下文c;
int awID;
@凌驾
创建公共空间(捆绑冰柱){
超级冰柱;
//将结果设置为取消。这将导致小部件主机取消
//如果他们按下后退按钮,则退出小部件放置。
setResult(结果被取消);
试一试{
citylist=getCityList();
}捕获(IOE异常){
Log.e(“加载城市列表”,e.getMessage());
}
对于(int i=0;i<1242;i++){
城市[i]=城市列表[i][0];
}
//设置要使用的视图布局资源。
setContentView(R.layout.configure);
c=配置应用程序。此;
Intent=getIntent();
Bundle extras=intent.getExtras();
如果(附加值!=null){
awID=extras.getInt(
AppWidgetManager.EXTRA\u APPWIDGET\u ID,
AppWidgetManager。无效的\u APPWIDGET\u ID);
}否则{
完成();
}
awm=AppWidgetManager.getInstance(c);
cityList=(ListView)findViewById(R.id.cityList);
//通过在listview中使用setAdPath方法,我们在列表中添加了一个字符串数组。
setAdapter(新的ArrayAdapter(这个,android.R.layout.simple_list_item_1,cities));
//cityList.setOnItemClickListener(citylistener);
cityList.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
公共链接(AdapterView av、视图v、内部位置、长id){
df=新的简化格式(“yyyy/MM/dd HH:MM:ss”);
字符串str=((TextView)v.getText().toString();
RemoteViews RemoteView=新的RemoteView(c.getPackageName(),
R.layout.widget);
setTextViewText(R.id.mytext,str);
setTextViewText(R.id.date,df.format(new date());
意向输入=新意向(c,时钟类);
pendingent pi=pendingent.getActivity(c,0,in,0);
setonClickPendingContent(R.id.Widget,pi);
updateAppWidget(awID,RemoteView);
意向结果=新意向();
result.putExtra(AppWidgetManager.EXTRA\u APPWIDGET\u ID,awID);
setResult(结果正常,结果);
完成();
}
});
}           
私有字符串[][]getCityList()引发IOException{
Context=getApplicationContext();
InputStream instream=context.getResources().openRawResource(R.raw.cities\u final);
//如果文件可供读取,则
如果(流内!=null){
//准备文件以便阅读
InputStreamReader inputreader=新的InputStreamReader(流内);
BufferedReader buffreader=新的BufferedReader(inputreader);
而((line=buffreader.readLine())!=null){
字段=行。拆分(“,”);
for(字符串x:字段){
列表[行][col]=x;
col++;
如果(x!=null){
国家=x;
}
}
列表[行][2]=国家;
行++;
col=0;
}
for(int i=0;(i
}

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


请帮我解决这个问题。!!!:(

此链接中给出了温度计的类似示例 你可以用crea
 android:dial="@drawable/YOUR_OWN_DIAL" 
 android:hand_hour="@drawable/YOUR_OWN_HOUR"
 android:hand_minute="@drawable/YOUR_OWN_MINUTE"