2013-07-22 2 views
0

내 위젯은 배터리 수준 위젯입니다. 내가 원하는 건 배터리 수준에 따라 배터리의 다른 이미지를 표시하는 것입니다. 이것은 내 코드에서 가능합니까?배터리 잔량에 따라 배터리 위젯의 이미지가 어떻게 바뀌나요?

BatteryStatusWidgetActivity

public class BatteryStatusWidgetActivity extends AppWidgetProvider { 
    /** Called when the activity is first created. */ 
     private String batteryLevel = "init"; 
     private int widgetImageFrame = R.drawable.widget_batt_frame01; 
     @Override 
     public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
      context.getApplicationContext().registerReceiver(this, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 
      updateView(context); 
     } 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      int rawlevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 
      int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); 
      int level = 65; 
      level = (rawlevel * 100)/scale; 
      batteryLevel = level + "%"; 
      widgetImageFrame = R.drawable.widget_batt_frame01; 
      updateView(context); 
      super.onReceive(context, intent); 
     } 
     public void updateView(Context context) { 
      RemoteViews thisViews = new RemoteViews(context.getApplicationContext().getPackageName(), R.layout.widget_layout); 
      thisViews.setTextViewText(R.id.widget_text, batteryLevel); 
      thisViews.setImageViewResource(R.id.imageView1, widgetImageFrame); 
      ComponentName thisWidget = new ComponentName(context, BatteryStatusWidgetActivity.class); 
      AppWidgetManager.getInstance(context).updateAppWidget(thisWidget, thisViews); 
     } 

과 widget_layout

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/relativeLayout1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="center" > 
    <ImageView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:src="@drawable/widget_batt_frame01" /> 
      <LinearLayout 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/layout" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:layout_centerVertical="true" 
      android:layout_margin="10dip" 
      android:gravity="center_vertical" 
      android:orientation="vertical" 
      android:paddingTop="0dip" > 
      <TextView 
       android:id="@+id/widget_text" 
       style="@android:style/TextAppearance.Medium" 
       android:layout_width="wrap_content" 
       android:layout_height="0dp" 
       android:layout_gravity="center_vertical" 
       android:layout_weight="1" 
       android:gravity="center_horizontal|center_vertical" 
       android:text="@string/battery_level" 
       android:textSize="12dp" 
       android:textColor="#000000"/> 
      </LinearLayout> 
</RelativeLayout> 

감사합니다.

답변

1

저는 이전 프로젝트에서 다양한 시각을 보이거나 숨김으로써이 목표를 달성했습니다. 당신의 updateView이 같은 뭔가() :

if (level > 90) { 
    thisViews.setViewVisibility(widget_frame01, View.VISIBLE); 
    thisViews.setViewVisibility(widget_frame02, View.GONE); 
    thisViews.setViewVisibility(widget_frame03, View.GONE); 
} else if (level > 80) { 
    thisViews.setViewVisibility(widget_frame01, View.GONE); 
    thisViews.setViewVisibility(widget_frame02, View.VISIBLE); 
    thisViews.setViewVisibility(widget_frame03, View.GONE); 
} else { 
    thisViews.setViewVisibility(widget_frame01, View.GONE); 
    thisViews.setViewVisibility(widget_frame02, View.GONE); 
    thisViews.setViewVisibility(widget_frame03, View.VISIBLE); 
} 

그런 다음 XML로, 그렇지 않으면 당신이 위에 쌓여 이미지의 혼란을 볼 수 있습니다, 그들은 모두 기본적으로 숨겨져 있습니다 그래서 android:visibility="GONE"에 imageviews의 모든 설정 초 동안 서로 먼저 위젯 설정시 :

<ImageView 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/widget_frame01" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentTop="true" 
      android:src="@drawable/widget_batt_frame01" 
      android:visibility="GONE" /> 
    <ImageView 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/widget_frame02" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentTop="true" 
      android:src="@drawable/widget_batt_frame02" 
      android:visibility="GONE" /> 
    <ImageView 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/widget_frame03" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentTop="true" 
      android:src="@drawable/widget_batt_frame03" 
      android:visibility="GONE" /> 

그것은 매우 우아 아니다,하지만 나는 그것을 작동시킬 수있는 유일한 방법이었다.

+0

나중에 사용해 주셔서 감사합니다. 하지만 내 'updateView()'내부의 실제 코드는 어디에 넣어야합니까? 거기에는 예를 들어 배터리 레벨을 보여주는'thisViews.setTextViewText' 부분이 있습니다. –