Android-世界时钟小部件模拟

发布于 2024-12-20 09:24:05 字数 6186 浏览 0 评论 0原文

我计划在 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作为钟面并根据时间绘制表盘?

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

I am planning to create a world clock widget in android. The clock should show the selected country's time as an analog clock widget. But I'm feeling difficulties as I'm a beginner in android.

My widget.xml file contains the following:-

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

I am using the following configuration activity for my widget:-
(To display the city list)
package 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;
    }       

}

Can I use my own custom view in the widget, apart from analog clock? Or is there any other way to show the clock? like use the Imageview as the clock face and to draw the dial according to the time?

Please help me regarding this.!!!:(

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

卖梦商人 2024-12-27 09:24:05

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

A similar example for thermometer is given in this link
http://mindtherobot.com/blog/272/android-custom-ui-making-a-vintage-thermometer/
You can create your own view and make the clock as well.

知足的幸福 2024-12-27 09:24:05

您可以用自己的图纸替换钟盘、钟针分针和钟针小时。然后你就会拥有自己的定制时钟。

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

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

You can replaced the clock dial, clock hand minute and clock hand hour with your own drawings. Then You'll have your own custom clock.

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

Test the layout in the Graphical Layout Tool to see how it look like.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文